C 中的额外括号:超越运算符优先级
在 C 中,括号不仅用于影响运算符优先级,还用于各种其他目的。了解这些附加上下文对于避免意外行为至关重要。
括号改变含义的上下文:
防止参数相关名称查找:
括号可以抑制函数调用中依赖于参数的名称查找。例如, (fun)(arg) 阻止 fun 解析为调用范围中的函数,这与 fun(arg) 不同。
在列表上下文中启用逗号运算符:
在列表中(例如,函数参数、初始化列表),括号启用逗号运算符。例如,a, (b, c), d 的行为与 a, b, c, d 不同,因为逗号运算符应用于括号内。
解决令人烦恼的解析:
括号可以消除复杂语法的歧义,例如“最令人烦恼的解析”。如果没有括号,类似于声明和函数调用的结构可能被解释为声明。
推导 decltype 表达式中的引用:
decltype(e)和 decltype((e)) 产生不同的结果。前者通常表示右值引用,而后者通常对应于左值引用。括号控制此行为。
防止预处理器宏错误:
括号可以缓解与宏使用相关的问题。它们通过分隔参数列表来防止不需要的运算符优先级,并在宏参数中启用逗号。
使用指南:
而额外的括号通常不会'为了避免损害代码,明智地使用它们至关重要。避免不必要的嵌套并考虑使用替代技术,例如现代 C 11 语法(如果适用)。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3