C++11 为函数中的返回类型引入了箭头符号(不知道名字):
template <typename T>
auto fun(T&& a) -> decltype(bar(a)){ ... }
但根据 scott meyer 的说法,单独使用 auto 作为返回类型将删除所有 const 和引用限定符(因为它遵循与模板推导相同的模式),因此惯用的方法是执行 decltype(auto )
将所有限定符保持在类型之上。
但是,在这种情况下,auto
是否被推断为 decltype(bar(a))
?那么 decltype(auto)
会是 decltype(decltype(bar(a)))
吗?那会是多余的吗?
最佳答案
当你有一个 trailing return type , auto
关键字纯粹作为符号元素出现。返回类型变为 ->
之后的任何类型。不执行类型推导。这就是带有尾随返回类型的函数声明的简单写法。自动返回类型推导仅在您不有尾随返回类型时发生,即,auto
用作占位符返回类型,没有-> …
在函数声明符的末尾。
关于带有箭头符号的 C++ 模板自动返回类型需要 decltype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51619314/