我知道,在 C++ 中,当您编写时
int i;
在有效地为变量赋值之前,您不能对变量将持有的值做出任何假设。但是,如果你写
int i = int();
那么您可以保证i
将为0
。所以我的问题是,这实际上不是语言行为的不一致吗?我的意思是,如果我定义了一个类 MyClass
并编写了
MyClass myInstance;
我可以放心,类的无参默认构造函数会被调用来初始化myInstance
(如果没有则编译器会失败),因为RAII原则就是这样。但是,对于原始类型,资源获取似乎不再是初始化。这是为什么?
我不认为更改从 C 继承的这种行为会破坏任何现有代码(世界上是否有任何代码在假设不能对变量的值做出假设的情况下工作?),所以我想到的主要原因可能是性能,例如在创建原始类型的大数组时;不过,我还是想知道是否有一些官方对此的解释。
谢谢。
最佳答案
没有。这不是不一致。
如果你的类定义为:
struct MyClass
{
int x;
float y;
char *z;
};
那么这条线并没有像你认为的那样:
MyClass myInstance;
假设上面是在一个函数内声明的,它等同于:
int x; //assuming declared inside a function
在 C++ 中,类型大致分为 3 种,即。 POD、非 POD、聚合——它们之间有明显的区别。请阅读它们及其初始化规则(关于它们的主题太多。在本站搜索)。另请阅读 static initialization and dynamic initialization .
关于c++ - 为什么 C++ 原始类型不像其他类型那样被初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263798/