我已经看到,使用尾随返回类型的原因之一是我们想从输入参数中推断出返回类型。
我知道还有其他原因,但我将重点放在这个问题上。
给定的示例之一是:
template <typename T>
auto func(const T & t) -> decltype(std::cout << t)
{
return std::cout << t;
}
但我想不出任何具体的用例。
我的意思是,我们在编写函数时总是知道函数的返回类型,当真正需要并且无法避免从参数推导返回类型时,我找不到任何具体的例子。
我们总是可以(如果我没记错的话)通过直接指定返回类型来重写函数的原型,而不进行任何推导,这在我的意义上使它更简洁明了。
上面的例子可以改写为:
template <typename T>
std::ostream& func(const T & t)
{
return std::cout << t;
}
在我看来,这比尾随返回类型版本更简洁且更具可读性。
我错过了什么?