我正在尝试将std :: string作为默认参数传递给函数。
我正在尝试以下
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
作为函数的参数,请看这里,我会得到编译错误。但是当我打印字符串val
和fun
时,我得到相同的输出。我的问题是如果两个字符串的值不同,是什么原因,因为string val = ""
也会创建一个空字符串。
答案 0 :(得分:3)
您正在查看函数的参数列表,因此规则不同。 std::string
具有默认构造函数并不重要。
关键是语言的参数列表规则确保允许或禁止调用者忽略调用中的参数。给定默认值时,调用者可以省略该参数,而是使用默认值。如果没有默认值,调用者必须提供适当的参数。
如果省略第二个参数的默认值,则调用
string_fun(3);
无法编译,因为它至少需要两个参数。您甚至可以在调用中使用默认构造函数:
string_fun(3, string());