括号运算符在C ++中自行执行的操作

时间:2018-11-21 07:56:08

标签: c++

在编写一些代码期间,我遇到了一个错字,导致产生意外的编译结果,并导致我玩耍并测试编译器可以接受的内容(VS 2010)。

我写了一个只包含括号运算符的表达式,其中有一个数字(空括号给出了编译错误):

(444);

当我在调试模式下运行代码时,程序似乎跳过了这一行。括号运算符本身出现时是什么意思?

2 个答案:

答案 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;然后由编译器进行优化。