代码之家  ›  专栏  ›  技术社区  ›  Tim Randall

我能说服自动生成的构造函数将POD类成员归零吗?

c++
  •  1
  • Tim Randall  · 技术社区  · 7 年前

    假设我定义了一个包含一些简单POD成员的类,我懒得编写一个默认构造函数来将所有类成员初始化为默认值。相反,我要求编译器为我这样做:

    class Foo
    {
    public:
        Foo() = default;
        int x;
        // etc.
    }
    

    x 此自动生成的构造函数初始化为零:用于类的本地对象 Foo ,

    我的问题是,是否有一种符合标准的方法来说服编译器自动将这些POD成员归零。我之所以说“符合标准”,是因为我需要能够依赖其他编译器来实现类似的行为。我之所以说“自动”,是因为我不想写一个构造函数,列出每个类成员,如果我可以避免它。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Oliv    7 年前

    它们是两种解决方案:

    1. 或者定义成员的默认初始值设定项,如刚刚出现的lubgr的答案所示。
    2. 或者总是更喜欢使用值初始化类实例,在这里您可以默认初始化它们: Foo an_obj{}; Foo an_obj; .
        2
  •  4
  •   lubgr    7 年前

    可以使用类内成员初始值设定项,如下所示:

    class Foo {
        int x = 0;;
        int y{}; // same effect.
    };
    

    其优点是跨稍后可能添加的构造函数的一致性。该方法也由 Core Guidelines C.45 .