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

Sak*_*war 1 c++ function function-prototypes auto c++11

我知道使用auto关键字可以自动从 Rvalue 推导出变量的类型。那为什么我的代码中下面的函数片段会出现编译错误呢?

auto getName(auto str = "John Doe") {
    return str;
}
Run Code Online (Sandbox Code Playgroud)

编译错误是函数原型中不允许的“自动”。我用谷歌搜索了一下,我认为auto不能在函数原型中使用。为什么这样?

Jer*_*fin 6

您可以auto在 lambda 表达式中使用,但不能在普通函数中使用。

为了获得相同的效果,您可以定义一个函数模板:

template <class T>
T getname(T input = "John Doe") {
    return input;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,该参数的默认值仅适用于实际上可以从字符串文字初始化的类型。

哦,顺便说str一句,以开头的名字是保留的,所以最好使用不同的名字。

  • 在查看了这两个规格之后,我认为它比这更复杂一些。C++ 规范中的“[extern.names]”部分明确保留了 C 库中的这些名称。您引用的 C 未来方向部分特别提到“函数名称”和保留名称“以 str、mem 或 wcs 和小写字母开头”。名为“str”的局部变量不会被保留。 (2认同)