The*_*ind 2 c++ variadic-functions
标题几乎完全涵盖了我的问题。对于某些上下文 - 从各种来源我知道可变参数函数应该有签名,其中第一个参数提供有关传递了多少参数的信息,但是在玩弄它之后我发现它vs_arg总是nullptr在最后一个参数之后立即返回所以这段代码效果很好(使用 MS Visual Studio):
void func(MClass *t_instance...) {
std::va_list arguments;
va_start(arguments, t_instance);
for (MClass *instance = t_instance; instance != nullptr; instance = va_arg(arguments, MClass *)) {
std::out << instance->name << std::endl;
}
va_end(arguments);
}
Run Code Online (Sandbox Code Playgroud)
当然,如果没有nullptr作为参数传递,这是一个有效的假设吗?我找不到这个列表应该是空终止的,但也找不到相反的。
不,va_arg在最后一个参数上调用将返回空指针不是一个有效的假设。根据标准*调用,va_arg当没有剩余参数时,即当它指向最后一个参数时,具有未定义的行为。据我所知,程序无法检查它何时处于最后一个参数,必须通过其他方式提供此信息。
* C++ 标准指的va_arg是 C 标准的行为,C 标准在第 7.16.1.1 节第 2 节中对此进行了定义。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |