我有一个关于在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
已经完全初始化,这应该有一个正常的执行,对吗?
-
B的构造函数将类型为
A
的对象作为输入参数。在这个片段中,我们看到了结构/类的定义,因此没有创建类型为A
和B
的对象。 -
这将是未定义的行为,因为
a
在复制到input
时不会初始化。 -
这是一个使用c++11及以上版本正确初始化的代码(由于扩展了初始值设定项列表(,没有任何内容是未定义的。