如何决定constexpr返回参考

Aar*_*man 6 c++ constexpr auto c++17 if-constexpr

如果您有一个if constexpr ()决定做一件事或另一件事的函数,那么在一种情况下如何返回左值,在另一种情况下如何返回右值?

以下示例不会在第一个用法行中编译,因为返回类型auto为无引用:

static int number = 15;

template<bool getref>
auto get_number(int sometemporary)
{
    if constexpr(getref)
    {
        return number; // we want to return a reference here
    }
    else
    {
        (...) // do some calculations with `sometemporary`
        return sometemporary;
    }
}

void use()
{
    int& ref = get_number<true>(1234);
    int noref = get_number<false>(1234);
}
Run Code Online (Sandbox Code Playgroud)

max*_*x66 12

如何在一种情况下返回左值,在另一种情况下返回右值?

我想您可以尝试一下,decltype(auto)并加上几个括号

template<bool getref>
decltype(auto) get_number() // "decltype(auto)" instead of "auto"
{
    if constexpr(getref)
    {
        return (number); // not "number" but "(number)"
    }
    else
    {
        return 123123; // just a random number as example
    }
}
Run Code Online (Sandbox Code Playgroud)