繁体   English   中英

C++ function 中的自动返回类型与指定返回类型

[英]auto return types in C++ function vs specifying return type

在我工作的代码库中,我看到以下内容

class custom {
  auto set_data_type(custom_type_t type_t) -> custom & {
    // set some stuff
    // return *this;
  }
}

为什么我们不能简单地做

class custom {
  custom & set_data_type(custom_type_t type_t) {
    // set some stuff
    // return *this;
  }
}

当您已经知道返回类型并且已经将其写在->...位置时,在这种情况下使用auto有什么意义?

似乎auto仅在与decltype(arg)一起使用并且arg可能具有不同的返回类型时才有用?

我会说风格。

此外,它允许在任何情况下保持一致,

  • 简单的一个(就像这个),
  • 更有用的(“复杂” decltype(arg)范围(-> iterator而不是类型名typename C::iterator
  • 或需要一个 (lambda)。

对我来说,此功能的最大用途是在 cpp 文件中定义 function 主体时使用嵌套类型:

class MyLongClassName
{
  using ANestedType = ...;

  ANestedType myFunction();
}

当您实现 function 主体时,此语法避免了一些重复:

MyLongClassName::ANestedType MyLongClassName::myFunction()
{ ... }

相对

auto MyLongClassName::myFunction() -> ANestedType
{ ... }

我相信,根本不应该使用“自动”。 恕我直言,这是 void* 的丑陋兄弟姐妹; 它对程序员隐藏了类型,而最好确切地知道使用的是什么类型; 这会使一个人的编程风格变得笨拙、混乱并引发错误。 虽然唯一“合理”的用法是 typename “缩短”,但它实际上是荒谬的,因为短类型名称不需要替换,而长名称还有另一个关键字。 恕我直言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM