>初步信息:根据最近的ISO C++委员会行程报告,条件分支的[[ likely ]]
和[[ unlikely ]]
属性将在C++20
中添加,并在最新版本的GNU GCC中可用(您可以在在线编译器 wandbox.org 上使用它(。
问:以下构造是否
if (cond) [[ likely ]] { ... }
相当于下面的一个?
if (__builtin_expect(bool(cond), 1)) { ... }
为了有效地使用它,不同的编译器之间是否存在任何性能差异或实现细微差别,人们应该注意它?
以下构造是否等效于以下构造?
有意为之,是的。
编译器之间是否存在任何性能差异或实现细微差别,为了有效地使用它,人们应该注意它?
从 P0479 中可以看出,对这些属性的行为没有强制性的措辞要求。他们的行为作为非规范性说明的一部分被提及,鼓励实施,但不是强迫遵循。
回答这个问题的唯一方法是检查编译器的手册。