初步信息:根据最近的ISO C++ Committee Trip Report,将在[[ likely ]]
中添加用于条件分支的[[ unlikely ]]
和C++20
属性,并且在最新版本的GNU中可用GCC(您可以在在线编译器wandbox.org上使用它)。
问题:以下结构
if (cond) [[ likely ]] { ... }
等于下一个吗?
if (__builtin_expect(bool(cond), 1)) { ... }
为了有效地使用它,编译器之间是否应该意识到性能差异或实现细微差别?
答案 0 :(得分:8)
以下构造等同于以下构造吗?
是的,是的。
为了有效地使用它,编译器之间是否应该意识到性能差异或实现细微差别?
从P0479中可以看到,对这些属性的行为没有强制性的措词要求。他们的行为作为非规范性注释的一部分被提及,该实现被鼓励,但没有被强制遵循。
回答这个问题的唯一方法是检查编译器的手册。