与普通返回类型相比,在C ++ 11中指定尾随返回类型有什么好处?在这里看看foo1
和foo2
:
int foo1() {
return 1;
}
auto foo2() -> int {
return 1;
}
int main() {
foo1();
foo2();
}
在这个例子中,它们意味着完全相同的事情。
但是,使用尾随返回类型形式有一些优点(Phil Nash称这些"East End Functions",因为返回类型位于东端)。
template <typename T>
auto print(T const& t) -> decltype(std::cout << t) { return std::cout << t; }
Type C::foo() { ... } // error: don't know what Type is
C::Type C::foo() { ... } // ok
auto C::foo() -> Type { ... } // ok
D ::C::foo() { ... } // error, parsed as D::C::foo() { ... }
auto ::C::foo() -> D { ... } // ok
有些情况下,trailing-return-type是强制性的,有些情况下它是有用的,并且有些情况下它会做同样的事情。除了简单的字符数之外,没有其他情况更糟糕的情况。
另外,在数学上我们习惯于将功能视为A -> B
而不是B(A)
,所以auto(*)(A) -> B
作为函数指针采用A
并返回B
比B(*)(A)
更接近该视图。
另一方面,写auto main() -> int
看起来很荒谬。
最终,这纯粹是基于意见的。只需编写有效的代码。