默认参数声明:为什么默认字符串参数必须是 const

default argument declaration :why a default string parameter must be const

本文关键字:默认 参数 const 为什么 声明 字符串      更新时间:2023-10-16

如果不是默认值,则必须将该常量放在我的函数的最后一个参数上的原因是什么(它具有默认参数声明),则不需要该常量

string make_plural(string &word, size_t c, const string &ending = "s")
  {
     return c > 1 ? word + ending : word;
  }

错误是:"默认参数":无法从"常量字符 [2]"转换为"std::字符串 &"

但我不明白为什么。 任何机构都可以解释一下。

我自己找到了答案。我们必须放置 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;

您必须为第一个参数添加常量,如下所示

string make_plural(const string &word, size_t cnt,const string &ending = "s")
 {
     return cnt > 1 ? word + ending : word;
 }

初始化参数的原因和规则与变量相同,因此:普通引用不能由常量值初始化,例如作为常量的字符串文本。