【发布时间】:2018-04-10 19:54:31
【问题描述】:
我想使用结构绑定遍历地图,忽略键:
for (auto& [unused, val] : my_map)
do_something(val);
我用 gcc-7.2.0 尝试了不同的选项:
// The warning is issued
for ([[maybe_unused]] auto& [unused, val] : my_map)
do_something(val);
// Syntax error
for (auto& [[[maybe_unused]] unused, val] : my_map)
do_something(val);
// The same two combinations above with [[gnu::unused]].
似乎[[maybe_unused]] 属性尚未针对结构绑定实现。
有什么简单的解决办法吗?任何宏、gcc/gnu 扩展或任何临时禁止该特定警告的编译指示对我来说都可以;例如,在我使用 range-based-for 的整个函数体中禁用它,因为我使用的函数非常短(它基本上是两个具有精确行为的不同映射上的 range-for-loop )。
我用来编译项目的(相关)选项是:
-std=c++17 -Wall -Wextra -Werror -pedantic -pedantic-errors
我现在要做的是,但这很丑:
for (auto& [unused, val] : my_map)
(void)unused, do_something(val);
【问题讨论】:
-
@dfri 但我不能使用
std::ignore,因为它已经是一个声明的变量,而我拥有的是一个声明,所以我要引入新名称。 -
是的,我只发布了一个相关链接,而不是重复标记(如链接中所述,目前没有与
std::ignore等效的结构化绑定,尽管标准可能会引入一个后一点)。对链接线程中的一个答案的评论还建议使用maybe_unused进行警告抑制(涵盖绑定中的所有声明),但我不知道这是否受支持(因为您已经测试了一些变体)基于范围的循环中结构化绑定的上下文。
标签: c++ gcc c++17 unused-variables structured-bindings