【发布时间】:2018-08-04 20:27:31
【问题描述】:
我不明白编译器在这里做什么以及为什么它可以工作 c++ 代码
#include <cstdio>
int main()
{
printf( ({ // (1)
struct some_noize_struct {
// there may be another code
};
42;
"abc";
}) // (2)
);
return 0;
}
(1) 和 (2) 大括号之间的表达式类型是 const char*。经过一些实验,我发现了由最后一部分确定的那种 (1)-(2)-表达式。
这是一个示例代码。它适用于 c++11 及更高版本。 http://cpp.sh/5tb47
我的问题:它是如何工作的。
【问题讨论】:
-
这是一个GCC extension。它不适用于标准 C++。
-
顺便说一句,这可以在标准 C++11 中创建一个 lambda 并立即调用它:
printf( ([&]{ struct some_noize_struct { /*... */ }; 42; return "abc"; }) ); -
@HolyBlackCat,谢谢。实际上,msvc 会在此代码上产生错误。带有 --Wpedantic 的 g++ 会产生警告:ISO C++ 禁止在表达式中使用花括号。
标签: c++ c++11 expression gcc-extensions gcc-statement-expression