无法让 std::ignore 在范围内的结构化绑定中工作
Can't get std::ignore working in structured bindings in for range
此代码可以编译并运行,但带有 'unused variable 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。
一些上下文:
- 我在 gcc 7.4.0 和 Eclipse 中使用 C++17 CDT。
- 语法检查器显示与编译器相同的错误。这是连贯的。
- 同一项目的许多 cpp 文件中的其他 for range 存在同样的问题。这是一个普遍的问题,而不是特定于特定行的问题。
只是为了测试,这一行编译正常:
std::ignore = 0;
所以 gcc 识别 std::ignore,它只是在范围内识别失败。
已阅读 关于在结构化绑定中忽略的内容。
有人遇到类似问题吗?
谢谢!
结构化绑定声明变量1,绑定到被return编辑的对象的members/elements。这意味着您不能使用 std::ignore
,因为一方面它不是有效的变量名,另一方面它是一个已经声明的名称。如果您想忽略结果,只需将成员命名为 ignore
而不要像
那样使用它
for(auto [camera, ignore]: landmark->getObservations())
camerasToCounts[camera]++;
1:它实际上只创建了一个存储 return 值的变量,然后方括号中的名称实际上引用了 returned 对象的第 i 个成员。
此代码可以编译并运行,但带有 'unused variable 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。
一些上下文:
- 我在 gcc 7.4.0 和 Eclipse 中使用 C++17 CDT。
- 语法检查器显示与编译器相同的错误。这是连贯的。
- 同一项目的许多 cpp 文件中的其他 for range 存在同样的问题。这是一个普遍的问题,而不是特定于特定行的问题。
只是为了测试,这一行编译正常:
std::ignore = 0;
所以 gcc 识别 std::ignore,它只是在范围内识别失败。
已阅读
有人遇到类似问题吗?
谢谢!
结构化绑定声明变量1,绑定到被return编辑的对象的members/elements。这意味着您不能使用 std::ignore
,因为一方面它不是有效的变量名,另一方面它是一个已经声明的名称。如果您想忽略结果,只需将成员命名为 ignore
而不要像
for(auto [camera, ignore]: landmark->getObservations())
camerasToCounts[camera]++;
1:它实际上只创建了一个存储 return 值的变量,然后方括号中的名称实际上引用了 returned 对象的第 i 个成员。