让我们考虑以下类
class test1
{
private:
int a;
int b;
public:
test1():a(0),b(0){}
};
class test2
{
private:
int a;
int b;
public:
test2()
{
a=0;
b=0;
}
};
现在,我知道 test1()
构造函数是初始化 class
的数据成员的正确方法,因为在 test2()
我们正在执行赋值而不是初始化。我的问题是:
- 如果我们执行赋值而不是初始化,可能会出现什么问题?
- 在
test1()
构造函数的情况下,编译器不会在内部执行赋值吗?如果没有,那么这些是如何初始化的?
原文由 Uttam Malakar 发布,翻译遵循 CC BY-SA 4.0 许可协议
无法分配某些类类型(以及引用和
const
对象);有些不能默认初始化;有些默认初始化和重新分配可能比直接初始化更昂贵。对于像
int
这样的原始类型,两者之间几乎没有实际区别。默认初始化什么都不做,直接初始化和赋值都做同样的事情。在类类型的情况下,默认初始化、赋值和直接初始化各自调用不同的用户自定义函数,有些操作可能根本不存在;所以总的来说,这两个例子可能有非常不同的行为。