首页 > 解决方案 > 在 C++ 中链接构造函数时,首先调用哪个构造函数?

问题描述

我正在处理一个大型程序,其中许多构造函数相互交互,我设法将问题定位为我对将它们链接在一起时构造函数的执行顺序缺乏了解。

当您执行以下操作时:

#include<iostream>
struct one
{
    int x;
    one(int x) {this->x = x; std::cout << x << std::endl;}
};
struct two
{
    int x;
    two(int x) {this->x = x; std::cout << x << std::endl;}
};
struct three
{
    int x;
    three(int x) {this->x = x; std::cout << x << std::endl;}
};

struct parent
{
    one o1;
    two o2;
    three o3;
    parent():o1(1), o2(2), o3(3){}
};

int main()
{
    parent p;
}

您将获得以下输出:

1
2
3

但是,当您将父代码中的代码更改为:

struct parent
{
    three o3;
    two o2;
    one o1;

    parent():o1(1), o2(2), o3(3){}
};

你得到

3
2
1

这似乎表明调用构造函数的顺序是由成员变量/对象放置在结构中的顺序决定的,而不是构造函数调用放置在“链”中的顺序(这里的父构造函数案子)。

这对我来说不够直观,以至于我想知道这种行为是否有据可查并且是有意的,或者我是否只是在摆弄未定义的行为。换句话说,编写依赖于该属性的代码会是一种不好的做法吗?

提前致谢

标签: c++constructorg++

解决方案


推荐阅读