虽然额外的括号通常不会改变 C 程序的含义,但在某些特定情况下,它们确实具有效果,超越基本运算符优先级:
函数调用周围的括号,例如 (fn)(arg),可以防止参数相关的名称查找 (ADL)。如果没有括号,fn(arg) 将在封闭的命名空间中搜索可能的匹配函数。
在函数参数或初始化列表等列表上下文中,a, (b, c), d 允许逗号运算符单独应用于 (b, c),与标准 a 不同, b、c、d 表示法。
额外的括号可以消除类似声明的语法与函数或表达式语句发生冲突的代码的歧义。例如,在 S w(int(a)); 中和 S y((int)a);,括号清楚表明它们是对象声明,而不是函数声明。
decltype(e) 推导操作数是左值还是右值引用。添加括号(如 decltype((e)) 中那样)会强制将操作数视为右值引用。
可以在宏定义中使用括号以避免运算符优先级问题,用逗号保护宏参数,并防止标头中的宏扩展。例如,#define TIMES(A, B) (A) * (B);确保 TIMES(1 2, 2 1) 的计算结果为 9。
以上是何时以及如何在 C 中使用额外的括号来操作名称查找、逗号运算符行为或表达式求值?的详细内容。更多信息请关注PHP中文网其他相关文章!