在其他主题中已经多次讨论过不建议使用可变参数函数,因为编译器无法检查提供的参数的类型.
但是,如果用户确切知道类型可以是例如std :: string,那该怎么办?这里还有什么问题吗?
问候
您只能将"普通旧数据"(POD)类型作为可变参数传递.这些是基本类型(包括指针),以及其他POD类型的简单聚合; 任何具有非平凡构造函数,析构函数,基类或虚函数的东西都不是POD.传递非POD类型会产生未定义的行为.
如果您真的想将可变参数函数与复杂类型结合使用,则必须通过指针传递它们.
更新: C++ 0x草案将"未定义的行为"放宽为"有条件地支持,具有实现定义的语义".我假设这意味着你要么得到正确的运行时行为(必要时使用复制构造函数/析构函数),要么编译错误,但从来没有一致的实现的不正确的运行时行为.
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |