“{..}”构造(用作表达式)是标准吗?

时间:2015-08-11 19:04:20

标签: c++ c syntax

注意:请参阅编辑,看看为什么它不重复。

请注意在({..})电话中使用print()

#‎include‬ <iostream>
#include <sstream>

using namespace std;

void print(const std::string& msg) {
  cout << msg << endl;
}

int main() {
  print(({
    ostringstream s;
    s << "hello";
    s << " world";
    s.str();
  }));
}

这个构造用在Linux内核代码中 - 这是我第一次遇到它 - 通常在复杂的宏定义中。

事实证明,即使使用-Wall -Wextra,g ++也会在没有任何警告的情况下编译此代码段。

这件事真的是标准的C和C ++代码吗?如果是这样,它是如何被调用的,哪里可以找到它在最新的C ++(特别是)标准中定义的?

此外,如果它是标准的,那么在C ++中使用它时是否应该记住什么?例如,作用域的“返回值”的复制/移动语义是什么(如果可以称之为)?使用这种结构有哪些可能的缺点? (除了一些不了解或不喜欢它的人。)

编辑:这个问题涉及ANSI C. Are compound statements (blocks) surrounded by parens expressions in ANSI C?

所以现在的问题是,它是合法的C99还是C ++ 11?

0 个答案:

没有答案