我正在阅读有关“新” C++ 功能的文本,并遇到了decltype及其用法。我了解decltype在尾随返回类型中的原因,例如
template <typename lhsT, typename rhsT>
auto add(lhsT& lhs, rhsT& rhs) -> decltype(lhs + rhs) {
return lhs +rhs;
}
没有它,编译器将无法派生模板函数的返回类型。但是为什么语法是这样的呢?
为什么不使用类似的东西
template <typename lhsT, typename rhsT>
decltype(lhs + rhs) add(lhsT& lhs, rhsT& rhs) {
return lhs +rhs;
}
感觉更“自然”,因为返回类型是在通常的位置声明的,尽管是两个参数的结果。这是否与其他东西发生冲突,或者如果语法是这种不值得的方式,它是否会给编译器带来额外的工作?