是否可以在 do-while 循环的条件下使用 C++20 [[likely]] 或 [[unlikely]] 属性?

Can a C++20 [[likely]] or [[unlikely]] attribute be used on the condition of a do-while loop?

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

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

    return i;
}

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

Can a C++20 [[likely]] or [[unlikely]] attribute be used on the condition of a do-while loop?

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

However this looks rather strange. Is this really the correct place for the attribute?

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

} while (i < 42);

[[likely]] return i;

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

do [[likely]] {