我试图将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 = ""还创建了一个空字符串。
发布于 2014-04-30 17:58:33
您正在查看函数的参数列表,因此规则是不同的。std::string是否有默认构造函数并不重要。
关键是语言的参数列表规则确保允许或不允许调用方从调用中省略参数。当给定默认值时,调用方可以省略该参数,并使用默认值。如果没有默认值,调用方必须提供适当的参数。
如果省略第二个参数的默认值,则调用
string_fun(3);不编译,因为它至少需要两个参数。您甚至可以在调用中使用默认构造函数:
string_fun(3, string());https://stackoverflow.com/questions/23394872
复制相似问题