为什么 C++20 中的 [[可能]] 属性在这里引发警告?


#include <iostream>
int foo(int a, int b)
{
if(a < b) [[likely]] {
return a;
}
return b;
}
int main()
{
std::cout << foo(3,1) << std::endl;
}

演示

根据参考资料,似乎这就是我们应该用[[likely]][[unlikely]]属性装饰if子句的方式。它在 C++20 中也受支持(请参阅此处(。

但是,我遇到了警告:

main.cpp: 在函数 'int foo(int, int(' 中: main.cpp:5:15: 警告:语句开头的属性将被忽略 [-Wattributes] 5 | if(a ~~~~~~~~~~代码库对警告很严格,这将导致构建失败。那么,我做错了什么,还是这是一个错误?

我的MacBook上的G ++版本:

g++-9 (自制GCC 9.3.0_1( 9.3.0 版权所有 (C( 2019 自由软件基金会。 这是免费软件;有关复制条件,请参阅源。 没有 保证;甚至不是为了适销性或适合特定目的。

你的代码没有错。这是由于GCC的实现者忽略了复合语句的属性是一个事实。

[[likely]] if (whatever) {}的意思完全是别的——这意味着if语句本身是"可能的",而不是它的分支。

相关内容

最新更新