2012-04-10 27 views
9

In this document中,笔者认为将NON-POD类型传递给变量函数是未定义的行为?

只有POD类型可以是省略号的参数“...”,而的std :: string不是一个POD类型。

我理解为Passing NON-POD type to Variadic function is undefined behavior。这样对吗?
虽然,他是在说C/C++标准吗?我试图在n3242 C++规范中找到它。但找不到。

我想知道我的理解正确,这是一个标准。

回答

8

它指定在C++ 11 5.2.2/7:

传递具有一个非平凡复制构造类类型的潜在的评估参数,一个非平凡移动构造器,或非平凡的析构函数,没有相应的参数,被实现定义的语义条件支持。

因此,每个编译器是否支持或不支持;可移植代码不能依赖任何实现定义的行为。在较老的标准中,它只是未定义的。

+0

所以它是**实现定义** *不* **未定义**。 – 2012-04-10 06:11:01

+7

@Als:有条件支持;编译器可以选择不定义它。所以它是不确定的,不管它是否被定义。 – 2012-04-10 06:12:17

+1

谢谢你,你是如何发现这么快的?我无法找到,每次我尝试。你有什么秘密吗? – Benjamin 2012-04-10 06:34:34

相关问题