逻辑 && 是无分支 POV 中 if 语句的良好替代品

Is Logical && a good replacement of if statement in a branchless POV

所以,我有时会看到这样的代码:

some_conditions && something();

代替

使用
if(some_conditions) something();

现在,我想知道以下哪个版本最有效/更好用:

std::vector<int> v{};
v.size() < 10 && (v.push_back(2), 1); // using the comma operator since push_back does not returns anything and so can't be evaluated to bool

std::vector<int> v{};
if(v.size() < 10) v.push_back(2);

您的代码段不是无分支的,因为它仍然根据第一次比较的结果执行条件逻辑。两者之间生成的代码一般都会相同。

任何称职的优化编译器都应该生成相同的程序集。如果比较 GCC 的输出 on godbolt,两个表达式都产生相同的程序集(唯一不同的是分支名称),并且两种情况都产生分支。


一般来说,您的目标应该是编写可读性强的代码,而不用担心两者中哪一个“性能更好”。让您的代码易于阅读和维护更有价值。只有当您确定(在分析之后)您编写的代码是 sub-optimal 并导致问题时,才值得优化代码。