在c ++ 14 decltype(auto)中引入了成语.
通常,它的用途是允许auto声明使用decltype给定表达式的规则.
搜索成语的"好"用法示例我只能想到以下内容(由Scott Meyers提供),即函数的返回类型推导:
template<typename ContainerType, typename IndexType> // C++14
decltype(auto) grab(ContainerType&& container, IndexType&& index)
{
authenticateUser();
return std::forward<ContainerType>(container)[std::forward<IndexType>(index)];
}
Run Code Online (Sandbox Code Playgroud)
这个新语言功能有用吗?
请注意,[class.mem] p6中未提及trailing-return-type
一个完整的类的上下文是一个
(6.1)函数体,
(6.2)默认参数,
(6.3)noexcept-specifier([except.spec]),
(6.4)合同条件,或
(6.5)默认成员初始化程序在类的成员规范内.[注意:如果嵌套类在封闭类的成员规范中定义,则嵌套类的完整类上下文也是任何封闭类的完整类上下文. - 结束说明]
[expr.prim.this] p2也有关于此的说明:
如果声明声明了类X的成员函数或成员函数模板,则表达式是可选的cv-qualifier-seq和函数定义结尾之间的类型为"指向cv-qualifier-seq X的指针"的prvalue ,成员声明者或声明者.它不应出现在可选的cv-qualifier-seq之前,它不应出现在静态成员函数的声明中(尽管它的类型和值类别是在静态成员函数中定义的,因为它们在非静态成员函数中) .[注意:这是因为声明匹配在完整声明符已知之前不会发生.- 尾注] [注意:在trailing-return-type中,为了类成员访问的目的,要求定义的类不需要完整.稍后声明的类成员不可见.[例子:......