【发布时间】:2020-08-31 12:20:14
【问题描述】:
我想创建一个函数,它将信息记录到文件中。这个函数需要获取一些参数并且应该遍历它们并将它们打印到控制台。我有以下代码:
void log(int argnum ...)
{
va_list arguments;
std::string argval;
va_start(arguments, argnum);
for (int i = 0; i < argnum; i++) {
argval = va_arg(arguments, std::string);
std::cout << argval;
}
va_end(arguments);
}
当我尝试这样调用函数时:
log(10, "somebody", "once", "told", "me",
"the", "world", "is", "gonna", "roll", "me");
Visual Studio 打开“memcpy.asm”,出现访问冲突错误。知道有什么问题吗?
【问题讨论】:
-
是
"somebody"还是int?大多数时候可变参数函数模板是更好的选择 -
这些都不是
std::strings,他们是const char*s。 -
为什么人们在今天的 c++ 代码中使用这种痛苦的 70 年代初期的 C 宏?为什么不简单地
std::vector<std::string>>&? -
所有可变参数函数都是 C 函数。他们不懂 C++ 对象。
标签: c++ parameter-passing variadic-functions