首页 > 解决方案 > 您可以在类和构造函数中进行初始化吗?对吗?

问题描述

考虑下面的代码:

#include <iostream>

class tester
{
public:
    tester(){}
    explicit tester(double val) : 
        m_a(val) // I assume this now overwrites the "default" initialise value?
    {}
    double m_a {1.123}; // Default constructor value?
};


int main()
{
    tester t1;
    tester t2(2.456);

    std::cout << "t1:" << t1.m_a << std::endl;
    std::cout << "t2:" << t2.m_a << std::endl;

    return 0;
}

我的问题是,你能在类和构造函数体中同时拥有初始化值吗?- 编译器如何解决这个问题?似乎构造函数获胜,因为该程序的输出是:

t1:1.123
t2:2.456

标签: c++constructorinitialization

解决方案


是的,对于默认成员初始化程序

通过默认成员初始值设定项,它是包含在成员声明中的大括号或等号初始值设定项,并且在构造函数的成员初始值设定项列表中省略该成员时使用。

如果成员具有默认成员初始化程序并且还出现在构造函数的成员初始化列表中,则该构造函数的默认成员初始化程序将被忽略。

在默认构造函数m_a中没有在成员初始化列表中提及,那么它将被默认成员初始化为1.123. Intester::tester(double) m_a将由成员初始化器列表作为参数初始化val


推荐阅读