【问题标题】:Return vector as auto from function从函数返回向量作为自动
【发布时间】:2018-09-20 12:07:01
【问题描述】:

是否可以将 std::vector 作为自动返回? 例如:

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之前使用auto retVec()---> auto ret_vec = retVec(**)**;
  2. 错误:无法从ret_vec 推断出auto&amp;&amp; ---> for (auto it : **ret_vec**) {

我该如何写这个?

更新: 对不起。我在课堂上使用这个 retVec 作为方法,但它不起作用。当我在课堂上将它用作函数时 - 一切正常。我在提出问题时犯了错误。

【问题讨论】:

  • 你是怎么编译这个的?
  • 为了后代,您可以添加编译器版本和您运行的命令作为问题的一部分进行编译吗?
  • 这是一个实例,当添加 all 标签对您的问题有害。这根本不是有效的 C++11。
  • -1 除了doron和StoryTeller写的,请加complete relevant source code

标签: angular c++ c++11


【解决方案1】:

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

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

【讨论】:

  • Blazing fast : ) 可能希望将此链接编辑为答案:en.cppreference.com/w/cpp/language/auto,因为它在 auto function 旁边显示“(自 C++14 起)”
  • @Ron 这很奇怪,因为我使用 g++ (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0 和标志 -std=c++17 :)
  • @Max 您正在为 C++11 标准进行编译。 C++17 version 不会产生上述错误。
  • @Ron 对不起。我在课堂上使用这个 retVec 作为方法,但它不起作用。当我在课堂上将它用作函数时 - 一切正常。我提出问题的错误。
【解决方案2】:

当使用-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) 项。

【讨论】:

  • 感谢您的回复,我更新了问题。我提出问题的错误。
【解决方案3】:

这适用于 C++14(参见 here),不适用于 C++11(here)。

【讨论】:

  • 感谢您的回复,我更新了问题。我提出问题的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 2014-05-04
  • 2018-12-13
  • 2017-08-31
  • 2021-03-23
  • 2012-08-31
相关资源
最近更新 更多