C++ 初始化列表 - 我不明白

标签 c++ initialization-list

在Effective C++中,据说初始化列表中的数据元素需要按照它们的声明顺序列出。进一步说,这样做的原因是数据元素的析构函数以其构造函数的相反顺序被调用。

但我就是不明白这怎么会是个问题……

最佳答案

请考虑以下几点:

class Class {
    Class( int var ) : var1( var ), var2(var1 ) {} // allright
    //Class( int var ) : var2( var ), var1(var2 ) {} // var1 will be left uninitialized

    int var1;
    int var2;
};

第二个(被注释掉的)构造函数看起来没问题,但实际上只有var2会被初始化——var1会先被初始化,然后用初始化var2 在那一点上尚未初始化。

如果您以与成员变量在类声明中列出的顺序相同的顺序列出初始化程序,则此类错误的风险会大大降低。

关于C++ 初始化列表 - 我不明白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153189/

相关文章:

c++ - C++ 构造函数中参数的默认值

c++ - 如何初始化本身具有非平凡构造函数的对象的 STL vector ?

c++ - 为进程输出问题设置编码

c++ - 为模板类中的无效数据类型生成编译时错误?

c++ - 自定义 C++ cout 类 - 输出到控制台和日志文件

c++ - 如何在构造函数初始化列表中进行深层复制。 C++

c++ - 我可以检查初始化列表中设置的构造函数主体中的变量吗?

C++ linux 系统命令

c++ - boost::program_options - 它是否对命令行选项进行精确的字符串匹配?

c++ - 是否需要在头文件中定义初始化列表?