Suppose I have a class with private memebers ptr
, name
, pname
, rname
, crname
and age
。如果我不自己初始化它们会怎样?这是一个例子:
class Example {
private:
int *ptr;
string name;
string *pname;
string &rname;
const string &crname;
int age;
public:
Example() {}
};
然后我做:
int main() {
Example ex;
}
ex中的成员是如何初始化的?指针会发生什么? Do string
and int
get 0-intialized with default constructors string()
and int()
?参考成员呢?还有 const 引用呢?
我想学习它,以便我可以编写更好(无错误)的程序。任何反馈都会有所帮助!
原文由 bodacydo 发布,翻译遵循 CC BY-SA 4.0 许可协议
代替显式初始化,类中成员的初始化与函数中局部变量的初始化相同。
对于 objects ,它们的默认构造函数被调用。例如,对于
std::string
,默认构造函数将其设置为空字符串。如果对象的类没有默认构造函数,如果你没有显式地初始化它,就会出现编译错误。对于 原始类型(指针、整数等),它们 没有 被初始化——它们包含之前碰巧在该内存位置的任意垃圾。
对于 引用(例如
std::string&
),不初始化它们是 非法 的,您的编译器会抱怨并拒绝编译此类代码。必须始终初始化引用。因此,在您的特定情况下,如果它们没有显式初始化: