为什么要调用构造函数?

为什么s1()在这里调用构造函数?

#include<iostream>

struct s1 {
    s1(int tmp) {

    }

    s1() {
        std::printf("s1 invoked");
    }
};

struct s2 {
    s1 s;
    s2(s1& s) {
        this->s = s;
    }
};
int main() {

    s1 o1(5);
    s2 o2(o1);
    return 0;
}

结果:
s1 invoked

为什么在s2(s1& s)调用s1()构造函数中按引用传递?

回答

鉴于实施s2(s1&)

s2(s1& s) {
    this->s = s;
}

数据成员s首先通过默认构造函数进行默认初始化,然后在构造函数体内分配。

您应该直接在成员初始值设定项列表中对其进行初始化。

s2(s1& s) : s(s) // direct-initialize data member s from parameter s
{}


以上是为什么要调用构造函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>