C ++ 11中auto关键字的编译错误

问题描述

我知道使用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开头的名称是保留的,因此最好使用其他名称。