std::string,string val 和 string val 之间的区别 = " "

std::string, difference between string val and string val = ""

本文关键字:string val 区别 std 之间      更新时间:2023-10-16

我正试图将std::字符串作为默认参数传递给函数。

我试着跟随

void string_fun(int i, string val = "", int j = 10)
// void string_fun(int i, string val, int j = 10) // <-- error since no default value
{
    cout << "values " << endl;
    cout << "i: " << i << endl;
    cout << "val: " << val << endl;
    cout << "j: " << j << endl;
}
void ret_fun()
{
    string fun;
    cout << "values " << endl;
    cout << "fun: " << fun << endl;
}
int main()
{
    string_fun(3);
    ret_fun();
    return 0;
}

我听说字符串的默认构造函数会初始化字符串,如果这是正确的,它的值是多少?请看这里,如果我只使用string val作为函数的参数,我会得到编译错误。但是当我打印字符串valfun时,我得到了相同的输出。我的问题是,由于string val = ""也会创建一个空白字符串,是什么使这两个字符串在值的情况下不同。

您正在查看函数的参数列表,因此规则不同。std::string有一个默认构造函数并不重要。

重点是,该语言的参数列表规则确保允许或不允许调用方从调用中省略参数。当给定默认值时,调用者可以省略参数,而使用默认值。如果没有默认值,调用者必须提供适当的参数。

如果你忽略了第二个参数的默认值,你的调用

string_fun(3);

不编译,因为它至少需要两个参数。您甚至可以在调用中使用默认构造函数:

string_fun(3, string());