【发布时间】:2019-02-04 11:35:59
【问题描述】:
我有一个函数使用省略号来获取一个变量和 NULL 终止的指针参数列表。我知道可变长度模板参数列表。它与遗留代码有关。以下两个调用是否会导致未定义的行为,因为终止符被 va_arg 解释为 Serializable*?这两个调用有什么区别?
void serialize(Serializable* first, ...) {
va_list vl;
va_start(vl, first);
while(1)
{
Serializable* arg = va_arg(vl, Serializable*);
if(arg == NULL)
break;
/* serialize arg here */
}
}
serialize(obj1, obj2, obj3, NULL);
serialize(obj1, obj2, obj3, nullptr);
【问题讨论】:
-
能否改正标题中的错字?
-
是的,只需edit您的帖子。
-
为什么不使用可变参数模板来代替这种非常糟糕的 C 风格代码?
-
@MatthieuBrucher “我知道可变长度模板参数列表。它是关于遗留代码的。” - OP
-
@LightnessRacesinOrbit 好吧,这取决于,我不是为了现代而写这样的东西。我会先写测试,但如果你在测试时不考虑更改代码,那么我可能会解雇你。
标签: c++ null variadic-functions nullptr