【发布时间】:2021-07-29 22:31:11
【问题描述】:
在 C++20 中,有没有办法用 [[likely]]/[[unlikely]] 注释三元表达式以提示编译器这两个结果中哪一个更有可能?
以下语法似乎不起作用
condition ? [[likely]] function1() : function2()
是否有不同的语法来注释三元表达式?还是我必须改用if?
【问题讨论】:
-
编译器不关心哪个更有可能。如果您这样做,作为代码的读者,请添加评论。
-
我不这么认为:"...这些属性可能适用于标签和语句..." en.cppreference.com/w/cpp/language/attributes/likely 和条件运算符的子句是表达式 - en.cppreference.com/w/cpp/language/operator_other
-
更新:这个 "thing" 编译但是 (a) 它是一个 "thing" 并且 (b) 我不认为它做了什么你想要它......
condition() ? []{[[likely]] function1();}() : function2();- 直播 - godbolt.org/z/To3jo1frq -
@jkb:编译器可以被关注,这就是
[[likely]]的重点。它可能能够生成在“可能”情况下更快的代码,但代价是另一个分支上的性能较慢,如果你能告诉它两者中哪一个实际上更有可能,那将是一个胜利。跨度> -
GCC 有
__builtin_expect可以这样使用:__builtin_expect(condition, true) : function1() : function2();。