什么原因是必须将const放在我的函数的最后一个参数(它有默认参数声明)上,如果它不是默认值,它就不需要那个const
string make_plural(string &word, size_t c, const string &ending = "s")
{
return c > 1 ? word + ending : word;
}
错误:'default argument':无法从'const char [2]'转换为'std :: string&'
但我无法理解为什么。任何机构都可以解释一下。
答案 0 :(得分:1)
我自己找到了答案。 我们必须把那个const放在因为字符串文字是const而在代码中我们将一个const字符串初始化为一个错误的普通引用。 明确如下:
string &r="some string";
错误,但
const string &r="some string";
有效 如果:
string make_plural(string &word, size_t c,const string &ending = "s")
{
return c > 1 ? word + ending : word;
}
如果第一个参数是普通参考,则调用可以是:
string str = "thing";
cout << make_plural(str,2) << endl;
但如果你想要通话:
cout << make_plural("thing",2) << endl;
你必须为第一个参数添加const,如下所示
string make_plural(const string &word, size_t cnt,const string &ending = "s")
{
return cnt > 1 ? word + ending : word;
}
初始化参数的原因和规则与变量相同,因此: 普通引用不能由const值初始化,例如作为consts的字符串文字。