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;
   }
}