这个问题已经在这里有了答案:
9年前关闭。
在选项1和选项2中初始化变量的利弊是什么?
class MyClass
{
public:
MyClass( float f, char a );
private:
float mFloat;
char mCharacter;
bool mBoolean;
int mInteger;
};
MyClass::MyClass( float f, char a ) : mFloat( f ), mBoolean( true ) // option 1.
{
// option 2
mCharacter = a;
mInteger = 0;
}
编辑:
为什么选项2如此常见?
最佳答案
简而言之,请尽可能使用初始化列表。 2个原因:
还要注意,变量总是按照它们在类声明中声明的顺序进行初始化,而不是按照它们在初始化列表中列出的顺序进行初始化(启用适当的警告后,如果列表写错了,编译器会警告您)。同样,在执行了类的析构函数中的代码之后,析构函数将以相反的顺序调用成员析构函数,从类声明中的倒数第一开始。