gpt4 book ai didi

c++ - 基于范围的for循环中的未命名循环变量?

转载 作者:可可西里 更新时间:2023-11-01 15:52:05 29 4
gpt4 key购买 nike

有没有什么方法既可以在基于范围的 for 循环中不“使用”循环变量,又可以避免编译器警告它未被使用?

对于上下文,我正在尝试执行以下操作。我启用了“将警告视为错误”,我宁愿不通过在某处毫无意义地提及变量来强制“使用”变量。

size_t getSize(const std::forward_list &list)
{
size_t count = 0;
for (auto & : list) // compile error, but if i do "auto &i" here, MSVC
// complains (reasonably) that i is unused
{
++count;
}
return count;
}

我知道还有其他方法可以做到这一点,但为了争论起见,我需要使用基于范围的 for 循环。

最佳答案

你可以定义一个宏:

#if defined(__GNUC__)
# define UNUSED __attribute__ ((unused))
#elif defined(_MSC_VER)
# define UNUSED __pragma(warning(suppress:4100))
#else
# define UNUSED
#endif

...
for (auto &dummy UNUSED : list)
{
++count;
}
...

它适用于 GCC 和 CLANG(不太确定 MSVC ......我似乎记得 MSVC 将禁用文件其余部分的警告)。

还有:

template<class T> void unused(const T &) {}
...
for (auto &dummy : list)
{
unused(dummy);

++count;
}
...

适用于所有编译器,不应有任何开销(Mailbag: Shutting up compiler warnings)。

Boost header <boost/core/ignore_unused.hpp> (Boost >= 1.56) 出于同样的目的定义函数模板 boost::ignore_unused() .

还有 C++11 std::ignore 是个不错的选择:

{
std::ignore = dummy;
// ...
}

类似问题:


PS C++17 seems to be getting一个[[maybe_unused]]属性以提供声明未使用变量的标准方法。

关于c++ - 基于范围的for循环中的未命名循环变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792347/

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