gpt4 book ai didi

c++ - 结构化绑定(bind)和基于范围的;在 gcc 中抑制未使用的警告

转载 作者:可可西里 更新时间:2023-11-01 17:34:30 29 4
gpt4 key购买 nike

我想使用结构绑定(bind)遍历一个映射,忽略键:

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]] 属性似乎还没有为结构绑定(bind)实现。

有什么简单的解决办法吗?任何宏、gcc/gnu 扩展或任何暂时禁止该特定警告的 pragma 对我来说都可以;例如,在我使用 range-based-for 的整个函数体中禁用它,因为我使用的函数非常短(它基本上是两个具有精确行为的不同映射上的两个 range-for-loops ).

我用来编译项目的(相关)选项是:

-std=c++17 -Wall -Wextra -Werror -pedantic -pedantic-errors

我现在要做的是,但这很丑陋:

for (auto& [unused, val] : my_map)
(void)unused, do_something(val);

最佳答案

似乎你是对的,maybe_unused 属性在 gcc 7.2.0 中还没有为结构化绑定(bind)实现,但值得注意的是它似乎是为 gcc 8.0 trunk (g++ 8.0 .0 20171026 实验)。

使用 gcc 8.0 主干编译,下面会发出一个 -Wunused-variable 警告:

// warning: unused structured binding declaration [-Wunused-variable]
for (auto& [unused, val] : my_map) { }

而这不会:

// no warning
for ([[maybe_unused]] auto& [unused, val] : my_map) { }

特别是,删除 [[maybe_unused]] 但至少使用一个有界变量也不会产生警告(故意的?)。

// no warning
for (auto& [unused, val] : my_map)
{
do_something(val);
}

// no warning
for (auto& [unused, val] : my_map)
{
(void)unused;
}

关于c++ - 结构化绑定(bind)和基于范围的;在 gcc 中抑制未使用的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005032/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com