为什么auto不能用作函数声明的返回类型

时间:2017-10-06 08:57:57

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

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

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

可以很容易地看出,这种情况下的返回类型是bool。为什么auto不能用作函数声明的返回类型?此功能很好地支持DRY principle

2 个答案:

答案 0 :(得分:4)

Jon和Ron评论,使用编译器修复了此问题。

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

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

答案 1 :(得分:1)

如果你想以现代的方式做到这一点,你可以在C ++ 11中使用尾随返回类型:

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

但我不得不承认,我更倾向于使用bool foo(){..}来预备C ++ 14。