【问题标题】:Why can auto not be used as a return type for function declaration为什么 auto 不能用作函数声明的返回类型
【发布时间】:2017-10-06 08:57:57
【问题描述】:

此代码无法编译 (intel icc 15.0.3) 并显示错误消息 explicit type is missing ("int" assumed)

auto foo(){
     const bool retVal = false;
     return retVal;
}

很容易看出,本例中的返回类型为bool。为什么auto不能作为函数声明的返回类型?此功能将很好地支持DRY principle

【问题讨论】:

  • 试试 C++14。这允许这样做。
  • 对“为什么功能 X 不存在”的一般回答是:“没有人能够实现它”通常带有隐含的 yet
  • 或者使用 lambda,它允许:auto foo = []() { const bool retVal = false; return retVal; };
  • @Caleth 也可能是“因为它会与这个或那个冲突”,这在具有相应历史和强大设计目标的语言(如 C++)中并不少见。
  • @Quentin 是的,但这可以说是没有人实现它的部分原因。在 C++ 的情况下,“实现它”看起来就像“写了一个提案,让委员会讨论,展示了一个原型,让它投票成为标准”。其中一些步骤可能会失败

标签: c++ c++11 dry auto


【解决方案1】:

正如Jon 和Ron 所评论的,使用 编译器可以解决这个问题。

此外,Aki 的 lambda 解决方案也可以:

auto foo = []() {
  const bool retVal = false;
  return retVal;
};

【讨论】:

    【解决方案2】:

    如果您想以现代方式执行此操作,可以在 C++11 中使用尾随返回类型:

    auto foo() -> bool{
         const bool retVal = false;
         return retVal;
    }
    

    但我不得不承认,对于 pre-C++14,我更喜欢使用 bool foo(){..}

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2021-11-06
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多