是否可以将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) {
}
当我写这样的东西时,我得到一个错误:
auto retVec()
之前使用auto
--->
auto ret_vec = retVec(**)**;
auto&&
推论ret_vec
---> for (auto it :
**ret_vec**) {
我实际上该怎么写?
更新: 对不起。我将此retVec作为类中的方法使用,它不起作用。当我在课堂上将其用作函数时,一切正常。我在提出问题时的错误。
答案 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)