【问题标题】:Passing NON-POD type to Variadic function is undefined behavior?将 NON-POD 类型传递给 Variadic 函数是未定义的行为吗?
【发布时间】:2012-04-10 06:02:49
【问题描述】:

In this document,作者说

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

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

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

【问题讨论】:

    标签: c++ c variadic-functions


    【解决方案1】:

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

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

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

    【讨论】:

    • 所以它是实现定义 不是 未定义。
    • @Als:有条件支持;编译器可以选择不定义它。所以不管有没有定义都是未定义的。
    • 谢谢你,你怎么这么快就找到了?找不到,每次都试了。你有什么秘密吗?
    • @MikeSeymour:无论是否定义,它都是由实现定义的。无论如何,它都会被实现很好地记录,所以在这个意义上它是实现定义的。
    • @Als:是的,我就是这个意思。很遗憾,我无法更正评论中的错字。
    猜你喜欢
    • 2016-07-16
    • 2016-06-14
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多