繁体   English   中英

括号运算符在C ++中自己做了什么

[英]What does the parenthesis operator does on its own in C++

在编写一些代码时,我有一个拼写错误导致意外的编译结果,并导致我玩和测试编译器可以接受的内容(VS 2010)。

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

(444);

当我在调试模式下运行代码时,程序似乎只是跳过该行。 当括号运算符单独出现时,它的含义是什么?

如果我能非正式地回答,

(444);

是一份声明 它可以在语言允许您编写语句的任何地方编写,例如在函数中。 它由一个表达式 444 ,括在括号中(也是一个表达式),后跟语句终止符;

当然,任何按照as-if规则运行的理智编译器都会在编译期间将其删除。

需要至少一个语句的地方是switch块(即使程序控制永远不会到达该点):

switch (1){
case 0:
    ; // Removing this statement causes a compilation error
}
  • (444); 是一个由括号表达式(444)和语句终止符组成的语句;

  • (444)由括号()prvalue表达式444

带括号的表达式(E)是一个主要表达式,其类型,值和值类别与E的类型,值和值类别相同。带括号的表达式可以在与可以使用E的情境完全相同的上下文中使用,具有相同的含义 ,除非另有说明。

所以在这种特殊情况下,括号没有其他意义,所以(444); 变成444 ; 然后由编译器优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM