默认参数声明:为什么默认字符串参数必须是 const
default argument declaration :why a default string parameter must be const
如果不是默认值,则必须将该常量放在我的函数的最后一个参数上的原因是什么(它具有默认参数声明),则不需要该常量
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;
}
初始化参数的原因和规则与变量相同,因此:普通引用不能由常量值初始化,例如作为常量的字符串文本。
相关文章:
- 如何使用默认参数等选择模板专业化
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 何时提供默认参数作为模板参数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 函数不接受 X 参数,函数使用默认参数
- initializer_list具有默认参数的构造函数
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 为什么C++构造函数在继承中需要默认参数?
- 必须非常量别名参数及其默认参数常量
- C++ 默认参数使用其他参数
- 组合函数参数包和默认参数
- 如何定义 Vector2f 的默认参数?[SFML]
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 如何设置默认参数以防用户不输入另一个参数
- 结构 c++ 中的默认参数
- 构造函数委托与默认参数
- 默认参数和函数指针作为函数参数C++
- 如何在继承层次结构中调用具有默认参数的构造函数?