在 C++11 中省略返回类型

2024-05-17

我最近发现自己在 C++11 模式下的 gcc 4.5 中使用了以下宏:

#define RETURN(x) -> decltype(x) { return x; }

并编写这样的函数:

template <class T>
auto f(T&& x) RETURN (( g(h(std::forward<T>(x))) ))

我这样做是为了避免必须有效地编写函数体两次,并使函数体中的更改和返回类型保持同步的不便(在我看来,这是一场即将发生的灾难)。

问题是这种技术仅适用于单行函数。所以当我有这样的事情(复杂的例子)时:

template <class T>
auto f(T&& x) -> ...
{
   auto y1 = f(x);
   auto y2 = h(y1, g1(x));
   auto y3 = h(y1, g2(x));
   if (y1) { ++y3; }
   return h2(y2, y3);
}

然后我必须在返回类型中添加一些可怕的东西。

此外,每当我更新函数时,我都需要更改返回类型,如果我没有正确更改它,如果幸运的话,我会收到编译错误,或者在最坏的情况下会出现运行时错误。我认为必须将更改复制并粘贴到两个位置并使它们保持同步并不是一个好的做法。

我想不出在返回时我想要隐式强制转换而不是显式强制转换的情况。

当然有一种方法可以要求编译器推断出这些信息。编译器保守秘密有什么意义呢?我认为 C++11 的设计是为了不需要这样的重复。


看来g++ 4.8 http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01599.html正在实现自动返回类型推导。 该补丁是由 Jason Merrill 打入的,他还发送了一篇有关该功能的 C++-1Y 论文。该功能可通过 -std=c++1y 获得。

还在玩它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++11 中省略返回类型 的相关文章

随机推荐