va_list c ++有问题

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)

Ser*_*eyA 6

你的可变函数的实现是非常不正确的.

首先,您需要一种方法来告诉函数有多少参数或它们何时结束.Standard printf通过使用格式说明符(它们的数字表示args的数量)来做到这一点,另一个选项是明确地提供数字.你似乎期望最后一个参数是整数0(奇怪的选择btw.),但你永远不会0作为最后一个参数传递给你的可变参数函数.

其次,您无法std::string从可变参数函数参数中进行移植.完全支持普通类型,对于必须使用的字符串char*.std::string这不是微不足道的,因为它有非平凡的构造函数和析构函数.有些编译器确实支持非平凡类型作为这些函数的参数,但其他编译器不支持,所以你不应该尝试这个.

最后但并非最不重要:变量函数在C++世界中没有地位,即使对于赋值也是如此.