我终于开始阅读c++11并且我不明白为什么需要尾随返回类型。
我遇到了以下示例,该示例用于突出问题:
template<class Lhs, class Rhs>
decltype(lhs+rhs) adding_func(const Lhs &lhs, const Rhs &rhs) {return lhs + rhs;}
该示例是非法的,因为decltype(lhs+rhs)
它不起作用,因为标识符仅在解析阶段之后才有效lhs
。rhs
我想我的问题是关于decltype
类型解析的时间。如果我没记错的话,该关键字decltype
用于在编译时确定表达式的类型。
decltype
在所有解析完成后,我看不到执行类型解析的缺点(这对于上面的示例来说可以正常工作)。我相信这将是解决问题的一种更简单的方法......
相反,C++11 标准提供了尾随返回类型:
template<class Lhs, class Rhs>
auto adding_func(const Lhs &lhs, const Rhs &rhs) -> decltype(lhs+rhs) {return lhs + rhs;}
我毫不怀疑我遗漏了一些东西,因为我看不到尾随返回类型的其他用途。我推理的缺陷在哪里?
尾随返回类型对我来说似乎是一个过于复杂的解决方案,因为decltype
在解析完整的函数体之后进行类型解析也能正常工作?