【发布时间】:2013-05-15 02:45:51
【问题描述】:
我终于开始阅读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 类型解析也能正常工作?
【问题讨论】:
标签: c++11 c++ c++11 compilation trailing-return-type