【问题标题】:How to use [[(un)likely]] at do while loop in C++20?如何在 C++20 的 do while 循环中使用 [[(un)likely]]?
【发布时间】:2022-12-01 10:35:35
【问题描述】:
do [[unlikely]]
{...}
while(a == 0);

可以编译此代码。

但这是告诉编译器 a 通常为非零的正确方法吗?

【问题讨论】:

  • 不要忘记 do while 循环的主体将始终至少运行一次,所以我怀疑编译器可以对此做任何事情吗?
  • do { [[unlikely]]; /*..*/ } while (a == 0);[[unlikely]] do { /*..*/ } while (a == 0); 将是“有效的”...

标签: c++ c++20


【解决方案1】:

从结构上讲,这是表达您想说的内容的正确方式。该属性放置在标记可能/不太可能执行的执行路径的位置。将它应用于 do/while 循环的块语句就足够了。它也可以在块内工作。

话虽如此,目前还不清楚这实际上有什么好处。它可能会阻止某些循环展开或禁止预取。但它不能真正改变编译代码的结构,因为块必须至少执行一次并且条件分支必须在块之后。

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2018-05-09
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多