带有箭头符号的 C++ 模板自动返回类型需要 decltype?

标签 c++ templates c++14

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/

相关文章:

c++ - LLVM 源代码中计算数组长度的函数

c++ - 在递归模板中通过引用传递模板函数

c++ - 使用C++模板编程提取任意结构的字段类型

c++ - Lamda 仅在声明为 'auto' 时编译,而不是在声明为 'bool' 时编译

c++ - header 中的字符串——这是否违反了 ODR?

c++ - Clang 不能与 std::experimental::optional 一起正常工作

c++ - 简单的 C 程序

c++ - 为什么在 Visual C++ 2008 中链接静态运行时库在运行时仍然需要 MSVCR71.dll?

C++11 随机数

c++ - 点坐标数据集中的众数