c++ - 在一行中初始化多个私有(private)变量

标签 c++ constructor default-constructor

我正在处理如下所示的遗留代码:

class Foo {
  public:
    Foo();
  private:
    bool a1, a2, a3 /*, ...*/, a50;
};

Foo::Foo() {
  a1 = a2 = a3 /* = ... */ = a50 = false;
}

这很乱。有没有办法将同一时间的所有私有(private)变量默认为与上述不同的单个值?我不想使用初始化列表,因为变量太多了。

我知道 bool 的默认构造函数赋值为 false - 这可以利用吗?

最佳答案

有很多可能的方法,但它们都非常相似。无论如何,您将使用不同的形式分配每个变量。

我认为最好的主要方法是在构造函数中逐行正确分配所有变量。可能它不是紧凑的,但它是最有意义的,你总是可以轻松地查看你的变量默认值:

Foo::Foo() {
    a1 = false;
    a2 = false;
    /*...*/
    a50 = false;
} 

您描述的另一种方法是使用赋值运算符:

Foo::Foo() {
    a1 = a2 = a3 /* = ... */ = a50 = false;
}

另一个允许在构造函数声明后立即初始化变量:

Foo::Foo() : 
    a1(false),
    a2(false),
    /*...*/
    a50(true)
    { }

如果我忘记了任何方法,请将其写在评论中。

关于c++ - 在一行中初始化多个私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999233/

相关文章:

c++ - 使用比平台提供的更新版本的 GCC 需要什么

c++ - 是否可以向特定 pthread ID 发送信号?

c++ - 关于 C++ 中的内存,我需要了解什么?

c++ - 构造函数 "=default"和 C++ 中编译器生成的构造函数有什么区别?

c++ - 在 C++ 中实例化一个新对象

c++ - {} 构造语法有多通用?

c++ - 如何在另一个类头文件中定义类构造函数?

c++ - 无法从花括号初始化列表构造 constexpr 数组

c++ - call没有匹配函数,为什么?

c# - 没有默认构造函数的设计