在编写代码时,我有一个拼写错误导致了意外的编译结果,这迫使我进行测试,并检查编译器(VS 2010)能接受什么。
我写了一个由括号运算符和其中的数字组成的表达式(空括号会导致编译错误):
(444);
当我在调试模式下运行代码时,程序似乎会跳过该行。当圆括号运算符单独出现时,它的含义是什么?
在编写代码时,我有一个拼写错误导致了意外的编译结果,这迫使我进行测试,并检查编译器(VS 2010)能接受什么。
我写了一个由括号运算符和其中的数字组成的表达式(空括号会导致编译错误):
(444);
(444);
是一种语句。可以在语言允许编写语句的任何地方编写,例如在函数中。它由一个表达式444
组成,括在括号中(也是一个表达式),后面跟着语句终止符;
。
当然,在遵循as-if规则的任何合理编译器中,在编译期间都将删除它。
至少需要一个语句的地方是在switch
块中(即使程序控制永远不会到达该点):
switch (1){
case 0:
; // Removing this statement causes a compilation error
}
decltype(var)
和 decltype((var))
不会返回相同的类型。有时仅使用圆括号就可以将名称转换为表达式。 - papagaga(444);
是一个由括号表达式(444)
和语句终止符;
组成的语句。
(444)
由括号()
和prvalue表达式444
组成。
括号表达式 (E) 是一个主表达式,其类型、值和值类别与 E 相同。括号表达式可在与 E 可用相同的上下文中使用,并具有相同的含义,除非另有说明。
因此,在这种特殊情况下,括号没有额外的意义,
所以 (444);
变成了444
;然后被编译器优化掉。
(1+2)*3;
的功能完全相同。 - Passer By444;
是等效的。它计算值444并对其不做任何处理,或者(由于计算444只是浪费时间且没有任何作用),编译器可以跳过它而不执行任何操作。 - Daniel H