【未使用】在if语句中在GCC中似乎无法工作

3

[[maybe_unused]] 的意义在于告诉编译器不要对未使用的变量发出警告,是吗?那么为什么GCC在这里会警告 ui 未被使用呢?

#include <iostream>
#include <vector>

#define NDEBUG
#include <cassert>

int main()
{   
  std::vector<int> numbers = {1,2,3};

  if ([[maybe_unused]] auto  ui = static_cast<unsigned int>(numbers.size()))
  {
    assert(ui);
    std::cout << "ok" << std::endl;
  }
}

我做错了什么吗?这是编译器的一个错误吗?

(另外一件事:在 Wandbox 上尝试时,无论 [[maybe_unused]] 是否存在,Clang 都不会警告说 ui 未被使用)。

(进一步地,即使没有 [[maybe_unused]],MSVC 也不会警告未使用的 ui)。

1个回答

5

我认为这是一个编译器bug。该属性可以应用于任何变量声明,而这是一个变量声明。

已提交91304号问题。


从票证中:Martin Sebor 指出 if (int i [[maybe_unused]] = f()) { } 可行的。 - Len
当然。虽然如此,它实现了我最初想要做的事情,所以我认为值得注意。 - Len
我还注意到,Clang和MSVC也接受 if (int i [[maybe_unused]] = f()) { } 而不会抱怨,因此这个技巧是跨平台的。 - Len

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接