【问题标题】:Best way to Initializing data members of a class using constructor in C++在 C++ 中使用构造函数初始化类的数据成员的最佳方法
【发布时间】:2021-08-28 08:27:27
【问题描述】:

我知道以下三种初始化 c++ 类的数据成员的方式。但是哪一种更安全,建议使用。请告诉我为什么

样式-1

    class example{
        int var1 = 0;
        double *var2 = NULL;
        
        example()
        {}
    };

样式 2

    class example{
        int var1;
        double *var2;
        
        example()
        {
            var1 = 0;
            var2 = NULL;
        }
    };

样式 3

    class example{
        int var1;
        double *var2;
        
        example():var1(0),var2(NULL)
        {}
    };

【问题讨论】:

    标签: c++ class constructor


    【解决方案1】:

    这很难回答正确,因为像这样的“最佳实践”问题,你总会得到几种意见。

    如果不确定最佳实践是什么,我建议您遵循 C++ 核心指南。关于您的主题,请参阅 C.48C.49

    1. 更喜欢样式 1 而不是样式 2,3
    2. 更喜欢样式 3 而不是样式 2

    从我的角度简要回顾一下推理:

    1. 样式 1 允许使用默认构造函数(未实现构造函数,但仍在进行初始化)
    2. 样式 1 允许标题的读者查看默认值
    3. 使用样式 1,您只需查看一个位置以确保变量已正确初始化,并且您不能“忘记”在您的构造函数之一中初始化变量
    4. 当使用参数初始化变量时,仍然需要样式 3。它仍然比样式 2 更可取,因为变量的“初始化”是通过初始化在代码中的预期位置清楚地传达的,而不是作为可能隐藏在构造函数代码中的赋值操作而略微模糊

    【讨论】:

    • 另外值得注意的是,样式 1 在 C++11 之前不受支持(这应该不再是问题)。在样式 2 中,您实际上有一个额外的副本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多