默认初始化类成员总是可取的吗?

Sum*_*udu 4 c++ initialization c++17

避免在类/结构中获取未初始化的成员是一般建议。考虑以下示例。

struct Foo
{
    Foo(){}
    int bar;
}
Run Code Online (Sandbox Code Playgroud)

要遵循建议,我必须显式初始化 bar(例如int bar{};)。

但是,如果我总是在构造后立即为其分配一个值来初始化该成员呢(让我们忘记将分配的值作为构造函数参数传递)。我还应该在这里遵循上述建议吗?如果没有开销,我仍然会这样做。但是,即使可以忽略不计,由于未使用的第一次初始化,也必须有相关的运行时开销。

Mar*_*som 5

初始化成员变量导致类操作更加稳定和可预测;不可能让对象处于未知或不一致的状态。另一方面,某些操作可能相对较慢,如果您知道您的程序逻辑不会让成员长时间未初始化,那么您当然可以离开它们。在 C 中,没有构造函数来填充这些成员,但人们一直在 C 中成功编程。

初始化 an 的成本int不足以在 99.9% 的情况下值得担心。

  • “在 99.9% 的情况下,初始化 int 的成本不足以值得担心。” - 我个人会添加几个9...... (6认同)
  • @JesperJuhl 我不会不同意,但在某些时候它只是变得双曲线。 (2认同)