C++ - auto return 引用和非引用类型
C++ - auto return reference and non reference type
当用 auto
return 类型编写函数时,我们可以使用 constexpr if
到 return 不同的类型。
auto myfunc()
{
constexpr if (someBool)
{
type1 first = something;
return first;
}
else
{
type2 second = somethingElse;
return second;
}
}
但是,我正在努力研究如何仅将其中一种类型设为引用。看起来下面的代码仍然是 return 两个分支的 r 值
auto myfunc()
{
constexpr if (someBool)
{
type1 &first = refToSomething;
return first;
}
else
{
type2 second = somethingElse;
return second;
}
}
有办法吗? Google 并没有透露太多,因为有很多关于 auto 的更一般用途的教程和 return 参考。在我的特殊情况下,该函数是一个 class 方法,我想 return 对成员变量的引用或数组的视图。
只是auto
永远不会成为参考。您需要 decltype(auto)
,并将 return 值放在括号内:
decltype(auto) myfunc()
{
if constexpr (someBool)
{
type1 &first = refToSomething;
return (first);
}
else
{
type2 second = somethingElse;
return second;
}
}
当用 auto
return 类型编写函数时,我们可以使用 constexpr if
到 return 不同的类型。
auto myfunc()
{
constexpr if (someBool)
{
type1 first = something;
return first;
}
else
{
type2 second = somethingElse;
return second;
}
}
但是,我正在努力研究如何仅将其中一种类型设为引用。看起来下面的代码仍然是 return 两个分支的 r 值
auto myfunc()
{
constexpr if (someBool)
{
type1 &first = refToSomething;
return first;
}
else
{
type2 second = somethingElse;
return second;
}
}
有办法吗? Google 并没有透露太多,因为有很多关于 auto 的更一般用途的教程和 return 参考。在我的特殊情况下,该函数是一个 class 方法,我想 return 对成员变量的引用或数组的视图。
只是auto
永远不会成为参考。您需要 decltype(auto)
,并将 return 值放在括号内:
decltype(auto) myfunc()
{
if constexpr (someBool)
{
type1 &first = refToSomething;
return (first);
}
else
{
type2 second = somethingElse;
return second;
}
}