[[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
)。
if (int i [[maybe_unused]] = f()) { }
是 可行的。 - Lenif (int i [[maybe_unused]] = f()) { }
而不会抱怨,因此这个技巧是跨平台的。 - Len