喵喔喔
这是一个初始化列表。当您进入构造函数的主体时,所有字段都已被构造;如果它们具有默认构造函数,则这些构造函数已被调用。现在,如果您在构造函数的主体中为它们分配一个值,则您正在调用复制分配运算符,这可能意味着如果对象有资源,则释放并重新获取资源(例如内存)。因此,对于像int这样的基本类型,与在构造函数的主体中分配它们相比,没有任何优势。对于具有构造函数的对象,这是一种性能优化,因为它避免了两次而不是一次的对象初始化。如果这些字段之一是引用,则必须有一个初始化列表,因为引用永远不能为null,即使在对象构造和构造函数主体之间的短暂时间内也是如此。以下引发错误C2758:'MyClass :: member_':必须在构造函数库/成员初始化程序列表中初始化class MyClass {public : MyClass(std::string& arg) { member_ = arg; } std::string& member_;};唯一正确的方法是:class MyClass {public : MyClass(std::string& arg) : member_(arg) { } std::string& member_;};