#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;
}
Run Code Online (Sandbox Code Playgroud)
根据参考资料,这似乎是我们应该如何if用[[likely]]or[[unlikely]]属性装饰子句。C++20 也支持它(请参阅此处)。
但是,我遇到了警告:
main.cpp:在函数“int foo(int, int)”中:
main.cpp:5:15: 警告:语句开头的属性被忽略 [-Wattributes]
5 | if(a < b) [[可能]] {
| ^~~~~~~~~~
代码库对警告很严格,这会导致构建失败。那么,我做错了什么,还是这是一个错误?
我的 macbook 上的 g++ 版本:
g++-9(自制 GCC 9.3.0_1)9.3.0 版权所有 (C) 2019 Free Software Foundation, Inc. 这是免费软件;请参阅复制条件的来源。没有 保修单; 甚至不是为了特定目的的适销性或适合性。
你的代码没有任何问题。这是因为 GCC 的实现者忽略了复合语句上的属性是一个事实。
[[likely]] if (whatever) {}完全意味着别的东西——这意味着if语句本身是“可能的”,而不是它的一个分支。
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |