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