问题描述
我遇到了这个古怪的C ++程序。
I came across this weird C++ program.
#include <iostream>
using namespace std;
int main()
{
int a = ({int x; cin >> x; x;});
cout << a;
}
任何人都可以解释发生了什么?这个结构叫什么?
Can anyone explain what is going on? What is this construct called?
推荐答案
它将用户输入值赋给 a
并打印出来。它是通过使用语句表达式
来完成的。
It assigns user input value to a
and prints it out. it is done by using a Statement Expression
.
语句表达式为 不受C / C ++标准支持。因此,使用语句表达式的任何代码都是非标准符合和不可移植的。
Statement Expressions are gnu gcc compiler extension are not supported by the C/C++ standards. Hence any code which uses statement expression is non standard conforming and non portable.
IBM IBM XL C / C ++ v7.0还支持语句表达式它的文档记录正确地解释它们:
The IBM IBM XL C/C++ v7.0 also support Statement Expressions & it's doccumentation explains them aptly:
语句表达式:
.--------------.
V |
>>-(--{----statement--;-+--}--)--------------------------------><
GCC中的sandard,使用以下选项之一 -ansi
, -std = c90
或 -std = iso9899:1990
, -std = c ++ 03
, -std = c ++ 0x
;要获取标准所需的所有诊断,还应指定
-pedantic
(或 -pedantic-errors
希望他们成为错误而不是警告)
Always compile your code by selecting a sandard in GCC, use one of the options -ansi
, -std=c90
or -std=iso9899:1990
, -std=c++03
, -std=c++0x
; to obtain all the diagnostics required by the standard, you should also specify -pedantic
(or -pedantic-errors
if you want them to be errors rather than warnings)
这篇关于什么是这个C ++语法,将一个括号包围的块,期望一个表达式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!