Joe*_*ake 0 c++ arguments variadic-functions variable-assignment
我只是想用一个可变数量的参数编写一个非常简单的函数,所以我可以为一个赋值编写一个类似于printf的函数.看完文档之后,va_list我不确定为什么这段代码会一直给我运行时错误:
这是我的代码:
void print(string sOne , ...);
void main()
{
print("first string", "second string", "third String");
system("pause");
}
void print(string sOne , ...)
{
va_list arguments;
va_start(arguments, sOne);
while ((va_arg(arguments, int)) != 0)
{
string printString = va_arg(arguments, string);
cout << printString;
}
va_end(arguments);
}
Run Code Online (Sandbox Code Playgroud)
你的可变函数的实现是非常不正确的.
首先,您需要一种方法来告诉函数有多少参数或它们何时结束.Standard printf通过使用格式说明符(它们的数字表示args的数量)来做到这一点,另一个选项是明确地提供数字.你似乎期望最后一个参数是整数0(奇怪的选择btw.),但你永远不会0作为最后一个参数传递给你的可变参数函数.
其次,您无法std::string从可变参数函数参数中进行移植.完全支持普通类型,对于必须使用的字符串char*.std::string这不是微不足道的,因为它有非平凡的构造函数和析构函数.有些编译器确实支持非平凡类型作为这些函数的参数,但其他编译器不支持,所以你不应该尝试这个.
最后但并非最不重要:变量函数在C++世界中没有地位,即使对于赋值也是如此.
| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |