首页 > 后端开发 > C++ > 何时以及如何在 C 中使用额外的括号来操作名称查找、逗号运算符行为或表达式求值?

何时以及如何在 C 中使用额外的括号来操作名称查找、逗号运算符行为或表达式求值?

Mary-Kate Olsen
发布: 2024-10-24 03:37:30
原创
496 人浏览过

When and How to Use Extra Parentheses in C   to Manipulate Name Lookup, Comma Operator Behavior, or Expression Evaluation?

C 中的额外括号:超越运算符优先级

虽然额外的括号通常不会改变 C 程序的含义,但在某些特定情况下,它们确实具有效果,超越基本运算符优先级:

1。防止参数相关的名称查找

函数调用周围的括号,例如 (fn)(arg),可以防止参数相关的名称查找 (ADL)。如果没有括号,fn(arg) 将在封闭的命名空间中搜索可能的匹配函数。

2.在列表上下文中启用逗号运算符

在函数参数或初始化列表等列表上下文中,a, (b, c), d 允许逗号运算符单独应用于 (b, c),与标准 a 不同, b、c、d 表示法。

3.令人烦恼的解析中的歧义解决

额外的括号可以消除类似声明的语法与函数或表达式语句发生冲突的代码的歧义。例如,在 S w(int(a)); 中和 S y((int)a);,括号清楚表明它们是对象声明,而不是函数声明。

4.推导 decltype 表达式中的引用

decltype(e) 推导操作数是左值还是右值引用。添加括号(如 decltype((e)) 中那样)会强制将操作数视为右值引用。

5.防止预处理器宏错误

可以在宏定义中使用括号以避免运算符优先级问题,用逗号保护宏参数,并防止标头中的宏扩展。例如,#define TIMES(A, B) (A) * (B);确保 TIMES(1 2, 2 1) 的计算结果为 9。

以上是何时以及如何在 C 中使用额外的括号来操作名称查找、逗号运算符行为或表达式求值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板