在编写一些代码期间,我遇到了一个错字,导致产生意外的编译结果,并导致我玩耍并测试编译器可以接受的内容(VS 2010)。
我写了一个只包含括号运算符的表达式,其中有一个数字(空括号给出了编译错误):
(444);
当我在调试模式下运行代码时,程序似乎跳过了这一行。括号运算符本身出现时是什么意思?
答案 0 :(得分:7)
如果我可以非正式地回答,
(444);
是声明。可以在语言允许您编写语句的任何地方(例如在函数中)编写代码。它由一个表达式 444
组成,并用括号括起来(也是一个表达式),后跟语句终止符;
。
当然,任何按照 as-if 规则运行的明智的编译器都将在编译期间将其删除。
switch
块中至少需要一个语句的一个地方(即使程序控制从未达到该点):
switch (1){
case 0:
; // Removing this statement causes a compilation error
}
答案 1 :(得分:0)
(444);
是由括号表达式(444)
和语句终止符;
(444)
由括号()
和prvalue表达式444
带括号的表达式(E)是其类型,值和值类别与E相同的主表达式。带括号的表达式可以在与可以使用E的上下文完全相同的上下文中使用,并具有相同的含义,除非另有说明。
因此,在这种特殊情况下,括号没有其他意义,
因此(444);
变成444
;然后由编译器进行优化。