问题描述
我知道使用auto
关键字可以从Rvalue自动推断出变量的类型。那么为什么我的代码中的以下函数片段会出现编译错误?
auto getName(auto str = "John Doe") {
return str;
}
函数原型中不允许编译错误为“自动”。我用Google搜索了一下,我认为auto
不能在函数原型中使用。为什么会这样?
解决方法
您可以在lambda表达式中使用auto
,但不能在普通函数中使用。
要获得相同的效果,可以改为定义功能模板:
template <class T>
T getname(T input = "John Doe") {
return input;
}
但是请注意,此参数的默认值仅适用于实际上可以从字符串文字初始化的类型。
哦,顺便说一句,以str
开头的名称是保留的,因此最好使用其他名称。