默认参数声明:默认字符串参数必须为const的原因

时间:2015-04-10 16:33:55

标签: c++

什么原因是必须将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&'

但我无法理解为什么。任何机构都可以解释一下。

1 个答案:

答案 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的字符串文字。