【问题标题】:Where to initialize variable [closed]在哪里初始化变量[关闭]
【发布时间】: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++


【解决方案1】:

我会选择第二个选项,因为您可能需要保留最初初始化的默认值。此外,如您所述,它包含的代码行更少。

【讨论】:

  • #3 线条最少
  • 您认为行越少越好。为什么?
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多