通过C++中的构造函数将一个类实例传递给另一个实例



我有一个关于在C++中相互传递类实例的问题,我的问题包括三个部分。假设这个例子:

struct A{
 int num;
};
struct B{
 int num;
 B(A input) : num(input.num){}
};

1:

int main(){
 //
 return 0;
}

这里B的构造函数接收input.num,即使input.num甚至还没有初始化。我想到目前为止这还可以,因为两个类都没有创建实例,对吗?编译器甚至不为类函数生成代码。num没有初始化并不重要,因为从技术上讲,它甚至还不存在?

2:

现在,如果我创建了它们的实例,但仍然没有在A:中初始化num,该怎么办

int main(){
 A a;
 B b(a);
 return 0;
}

这里num仍然没有初始化,这会导致undefined behaviour吗?B的构造函数何时尝试读取它?

3:

问题的最后一个例子是:

int main(){
 A a = {5};
 B b(a);
 return 0;
}

这里a已经完全初始化,这应该有一个正常的执行,对吗?

  1. B的构造函数将类型为A的对象作为输入参数。在这个片段中,我们看到了结构/类的定义,因此没有创建类型为AB的对象。

  2. 这将是未定义的行为,因为a在复制到input时不会初始化。

  3. 这是一个使用c++11及以上版本正确初始化的代码(由于扩展了初始值设定项列表(,没有任何内容是未定义的。

最新更新