我正在玩带有变量参数的函数,并决定创建一个函数来创建带参数的向量。我创建int
向量的功能有用......
vector<int> makeIntVector(int numArgs, ...) {
va_list listPointer;
va_start(listPointer, numArgs);
vector<int> made;
for(int a = 0; a < numArgs; a++)
made.push_back(va_arg(listPointer, int));
va_end(listPointer);
return made;
}
但不是我创建string
向量的功能:
vector<string> makeStringVector(int numArgs, string something, ...) {
va_list listPointer;
va_start(listPointer, something);
vector<string> made;
for(int a = 0; a < numArgs; a++)
made.push_back(va_arg(listPointer, string));
va_end(listPointer);
return made;
}
崩溃程序。我做错了什么?
答案 0 :(得分:4)
尝试将字符串作为varaidic参数传递给出了未定义的行为:“如果参数具有非POD类类型(第9节),则行为未定义。” (§5.2.2/ 7标准)。
答案 1 :(得分:1)
不应在C ++中使用变量参数函数。
第一个参数是它们只对像int或char *这样的POD是安全的,传递非POD C ++类型具有未定义的行为。
为什么不创建一个向量并将字符串推回到它中,而不是创建一个包含长参数列表的函数?
答案 2 :(得分:0)
我不确定,但我会调查va_*
是宏的事实,int是“原始”类型而string
不是。也许这会在某处导致问题。