87 c++ constructor initialization
可能重复:
C++初始化列表
在选项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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:为什么选项2如此常见?
Gre*_*ell 111
简而言之,在可能的情 原因2:
如果你没有在类的初始化列表中提到变量,那么构造函数将在进入你编写的构造函数体之前默认初始化它.这意味着选项2将导致每个变量被写入两次,一次用于默认初始化,一次用于构造函数体中的赋值.
另外,正如mwigdahl和avada在其他答案中所提到的,const成员和引用成员只能在初始化列表中初始化.
另请注意,变量始终按照它们在类声明中声明的顺序进行初始化,而不是按照它们在初始化列表中列出的顺序进行初始化(如果启用了正确的警告,编译器将在无序写入列表时发出警告).类似地,析构函数将以相反的顺序调用成员析构函数,在类的析构函数中的代码执行后,在类声明中最后一个调用.
Rap*_*rre 10
简而言之:在您的具体情况下,它不会改变任何东西.但:
我对选项2更常见的猜测是选项1不是众所周知的,也不是它的优点.对于新的C++程序员来说,选项2的语法更自然.
归档时间: |
|
查看次数: |
134730 次 |
最近记录: |