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)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |