从函数自动返回向量

时间:2018-09-20 12:07:01

标签: angular c++ c++11

是否可以将std :: vector返回为auto? 例如:

auto retVec() {
  std::vector<int> vec_l;

  l.push_back(1);
  l.push_back(2);

  return vec_l;
}
...
auto ret_vec = retVec();
for (auto& it : ret_vec) {
}

当我写这样的东西时,我得到一个错误:

  1. 错误:在扣除auto retVec()之前使用auto --->     auto ret_vec = retVec(**)**;
  2. 错误:无法从auto&&推论ret_vec ---> for (auto it : **ret_vec**) {

我实际上该怎么写?

更新: 对不起。我将此retVec作为类中的方法使用,它不起作用。当我在课堂上将其用作函数时,一切正常。我在提出问题时的错误。

3 个答案:

答案 0 :(得分:19)

您正在编译C ++ 11标准。您需要至少为C ++ 14标准进行编译,因为deduced return type仅从C ++ 14开始可用。参考说明:

  

在不使用尾随返回类型的函数声明中   语法上,关键字auto表示返回类型为   使用以下规则从其return语句的操作数推导出   模板参数推导。

答案 1 :(得分:4)

使用-std=c++11进行编译时,您会在Coliru上看到此错误,但这按预期的when compiled with -std=c++14起作用。

请注意,gcc甚至会在此输出提示:

  

main.cpp:8:13:注意:推导的返回类型仅适用于-std = c ++ 14或-std = gnu ++ 14

使用auto扣除的返回类型确实是C++14 feature,请参阅第(3)项。

答案 2 :(得分:3)

此功能自C ++ 14(请参阅here)开始,不适用于C ++ 11(here)。