C++ 14中的尾随返回类型

Vah*_*idi 5 c++ auto c++14

随着autoC++ 14 中返回类型的引入,是否存在需要尾随返回类型或者在C++ 14和17中完全过时的实际情况?

Ton*_*roy 11

考虑...

auto f(int x)
{
    if (x == 2)
        return 3;
    return 2.1;
}
Run Code Online (Sandbox Code Playgroud)

...这有一个模糊的回报类型 - intdouble.显式返回类型 - 无论是前缀还是尾随 - 可以消除歧义并将return参数强制转换为返回类型.

如果你想使用尾随返回类型特别也很有用decltype,sizeof等上一些参数:

auto f(int x) -> decltype(g(x))
{
    if (x == 2)
        return g(x);
    return 2;
}
Run Code Online (Sandbox Code Playgroud)


Yak*_*ont 10

追踪返回类型为您提供SFINAE支持.推迟返回类型永远不会导致错误,只是替换失败.

这允许编译器不必能够编译整个任意函数体,然后干净地退出以确定是否适用过载.