【发布时间】:2023-01-20 21:56:20
【问题描述】:
c++ 中的这 3 个变体中哪个更好,为什么?
1.)
bool flag;
if (a)
{
flag = true;
}
else
{
flag = false;
}
2.)
2.)
bool flag = false;
if (a)
{
flag = true;
}
3.)
RetVal=(true==a?true:false);
在我看来,第一个变体更好,因为变量只接收一次值,并且该值被设置在正确的逻辑位置。 然而,很多人不同意,因为第二种变体需要更少的代码行。 如果它是简单的代码,那么第三个变体只是很好。对于长而复杂的分配,很难阅读。
【问题讨论】:
-
对于性能来说,两者都不重要。我希望优化后所有 3 个都具有相同的汇编语言。
-
bool flag = static_cast<bool>(a); -
基于意见,但大多数指南建议在声明变量后立即对其进行初始化。并且条件运算符不应该用于混淆(我的意见)
-
Wh in 3) RetVal 未定义
-
所有三个选项都不是最优的。
flag=!!a;避免所有分支,这对现代 CPU 的分支预测/优化造成严重破坏,只需避免任何类型的分支。
标签: c++