相关疑难解决方法(0)

什么时候额外的括号有效,除了运算符优先级?

C++中的括号用于许多地方:例如,在函数调用和分组表达式中,以覆盖运算符优先级.除了非法的额外括号(例如函数调用参数列表周围)之外,C++的一般但非绝对规则是额外的括号永远不会受到伤害:

5.1主要表达式[expr.prim]

5.1.1一般[expr.prim.general]

6带括号的表达式是一个主表达式,其类型和值与所附表达式的类型和值相同.括号的存在不会影响表达式是否为左值.除非另有说明,否则带括号的表达式可以在与可以使用所包含的表达式的上下文完全相同的上下文中使用,并且具有相同的含义.

问题:在哪些上下文中,额外的括号会改变C++程序的含义,而不是覆盖基本的运算符优先级?

注意:我认为没有括号的指针到成员语法的限制&qualified-id超出了范围,因为它限制了语法而不是允许两个具有不同含义的语法.同样,在预处理程序宏定义中使用括号也可以防止不必要的运算符优先级.

c++ c++-faq parentheses language-lawyer c++11

91
推荐指数
1
解决办法
6630
查看次数

为什么在SUCCEEDED宏中有这么多括号?

Windows SDK具有SUCCEEDED宏:

#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
-----------------------^-------------^-----
Run Code Online (Sandbox Code Playgroud)

与其他宏一样,有一些括号可以确保编译器对意图的正确解释.

我没有得到的是为什么周围有括号(HRESULT)(hr)(我用^字符标记).hr括号化,以便可以存在一些复杂的构造,用HRESULT括号括起来形成C样式的强制转换,然后整个>=构造也用括号括起来,那么为什么额外的括号括起来(HRESULT)(hr)呢?

c com macros c-preprocessor

6
推荐指数
2
解决办法
1539
查看次数

标签 统计

c ×1

c++ ×1

c++-faq ×1

c++11 ×1

c-preprocessor ×1

com ×1

language-lawyer ×1

macros ×1

parentheses ×1