【问题标题】:Can a C++20 [[likely]] or [[unlikely]] attribute be used on the condition of a do-while loop?可以在 do-while 循环的条件下使用 C++20 [[likely]] 或 [[unlikely]] 属性吗?
【发布时间】:2021-11-15 10:57:23
【问题描述】:

我尝试将C++20[[likely]][[unlikely]] 属性放置在do-while 循环条件周围的不同位置,似乎将它们放在行尾之后三个主要编译器都接受分号:

int main(int i, char**)
{
    do {
        ++i;
    } while (i < 42); [[likely]]

    return i;
}

然而这看起来很奇怪。这真的是属性的正确位置吗?

【问题讨论】:

  • 注解放在;之后。那么return i 的意思不是很可能会被执行吗?哪个....嗯....编译器可以在没有注释的情况下进行推断。

标签: c++ attributes c++20


【解决方案1】:

C++20 [[likely]] 或 [[unlikely]] 属性能否用于 do-while 循环的条件?

[[likely]] 不能应用于“条件”。它可以应用于标签和语句。

然而这看起来很奇怪。这真的是属性的正确位置吗?

您已将该属性应用于 return 语句。如果我们稍微调整一下空格,你会看得更清楚:

} while (i < 42);

[[likely]] return i;

您应该将该属性应用于作为循环体的块语句:

do [[likely]] {

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2022-12-01
    • 2021-06-04
    • 2019-11-27
    • 2022-11-22
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多