0

此代码编译并运行,并带有“未使用的变量 i”警告:

for(auto [camera, i]: landmark->getObservations())
  camerasToCounts[camera]++;

我想忽略 i,所以我将其替换为std::ignore. 以下代码无法编译:

...
#include <tuple>
...
for(auto [camera, std::ignore]: landmark->getObservations())
  camerasToCounts[camera]++;

出现此错误:

error: expected ‘]’ before ‘::’ token

这个警告:

warning: unused variable ‘std’ [-Wunused-variable]

因为它无法识别 std::ignore。

一些上下文:

  • 我将 C++17 与 gcc 7.4.0 和 Eclipse CDT 一起使用。
  • 语法检查器显示与编译器相同的错误。这是连贯的。
  • 同一项目的许多 cpp 文件中的其他范围也存在同样的问题。这是一个普遍的问题,而不是特别局限于那条特定的线。
  • 只是为了测试,这一行编译得很好:

    标准::忽略 = 0;

所以 gcc 识别 std::ignore,它只是在范围内没有这样做。

已经阅读了这个关于忽略结构化绑定的好问题和答案。

有没有人有类似的问题?

谢谢!

4

1 回答 1

2

结构化绑定声明了绑定到所返回事物的成员/元素的变量1 。这意味着您不能使用std::ignore,因为其一不是有效的变量名,二是它已被声明的名称。如果你想忽略结果,只需命名成员ignore,不要像这样使用它

for(auto [camera, ignore]: landmark->getObservations())
    camerasToCounts[camera]++;

1:它实际上只创建了一个存储返回值的变量,然后方括号中的名称实际上是引用了返回对象的第 i 个成员。

于 2019-10-11T19:58:37.530 回答