通过使用省略号表示法来确保类型安全

sam*_*ami 2 c++

在其他主题中已经多次讨论过不建议使用可变参数函数,因为编译器无法检查提供的参数的类型.

但是,如果用户确切知道类型可以是例如std :: string,那该怎么办?这里还有什么问题吗?

问候

Mik*_*our 5

您只能将"普通旧数据"(POD)类型作为可变参数传递.这些是基本类型(包括指针),以及其他POD类型的简单聚合; 任何具有非平凡构造函数,析构函数,基类或虚函数的东西都不是POD.传递非POD类型会产生未定义的行为.

如果您真的想将可变参数函数与复杂类型结合使用,则必须通过指针传递它们.

更新: C++ 0x草案将"未定义的行为"放宽为"有条件地支持,具有实现定义的语义".我假设这意味着你要么得到正确的运行时行为(必要时使用复制构造函数/析构函数),要么编译错误,但从来没有一致的实现的不正确的运行时行为.