我遇到过一些场景,我想说一个函数的返回值可能在函数体内,而不是调用它的 if 语句。
例如,假设我想将代码从使用LIKELY宏移植到使用新[[likely]]注释。但是这些在语法上不同的地方:
#define LIKELY(...) __builtin_expect(!!(__VA_ARGS__),0)
if(LIKELY(x)) { ... }
对比
if(x) [[likely]] { ... }
没有简单的方法可以重新定义LIKELY宏以使用注释。会定义一个像
inline bool likely(bool x) {
if(x) [[likely]] return true;
else return false;
}
将提示传播到 if? 像
if(likely(x)) { ... }
类似地,在通用代码中,很难在实际if语句中直接表达算法似然信息,即使该信息在其他地方是已知的。例如,copy_if谓词几乎总是为假的。据我所知,没有办法使用属性来表达,但是如果分支权重信息可以通过函数传播,这是一个已解决的问题。
到目前为止,我还没有找到有关此的文档,并且我不知道通过查看输出的程序集来测试它的良好设置。