我遇到了这个奇怪的 C++ 程序。
#include <iostream>
using namespace std;
int main()
{
int a = ({int x; cin >> x; x;});
cout << a;
}
谁能解释一下发生了什么事吗?这个构造叫什么?
它将用户输入值分配给a
并打印出来。它是通过使用来完成的Statement Expression
.
语句表达式是gnu gcc 编译器扩展并且不受 C/C++ 标准支持。因此,任何使用语句表达式的代码都不符合标准且不可移植。
IBM XL C/C++ v7.0 还支持语句表达式,其文档恰当地解释了它们:
语句表达式:
复合语句是用大括号括起来的语句序列。在 GNU C 中,括号内的复合语句可以作为表达式出现在所谓的Statement expression
.
.--------------.
V |
>>-(--{----statement--;-+--}--)--------------------------------><
语句表达式的值是整个构造中出现的最后一个简单表达式的值。如果最后一条语句不是表达式,则该构造的类型为 void 并且没有值。
始终通过在 GCC 中选择标准来编译代码:使用选项之一-ansi
, -std=c90
or -std=iso9899:1990
, -std=c++03
, -std=c++0x
;要获得标准所需的所有诊断,您还应该指定-pedantic
(or -pedantic-errors
如果您希望它们是错误而不是警告)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)