因此,阅读我的一本教科书,我遇到了构造函数的初始化程序。我想知道是否存在性能差异,这是C ++通用编码标准的首选方法。
假设:
示例:
//Setting each private variable with assignment statements
SampleClass::SampleClass()
{
a = 0;
b = 0;
}
//Using initializers to set the private variables
SampleClass::SampleClass() : a(0), b(0)
{
}
我想如果有一个构造函数有参数且参数需要某种验证,最好使用在其中验证的方法。话虽如此,你会混合它们吗?
示例:
SampleClass2::SampleClass2(int fNumber, int sNumber) : a(fNumber)
{
makeSureNotZero(sNumber);
}
只是为了澄清问题:
答案 0 :(得分:3)
没有法律禁止混合这两种方法。
在PODs的情况下,两种方法之间不会有任何可测量的差异,并且C ++编译器可能会为两种初始化方法生成相同的代码。
另一方面,如果类成员是更复杂的类,而不是像POD
那样的int
,那么构造函数初始化将产生更好的结果。这只是一个经验法则,实际结果会有所不同,具体取决于每个特定的类别。默认构造一个类的实例,然后调用它的赋值运算符,将比直接构造它更好。
答案 1 :(得分:1)
我的答案取决于编译器。大多数编译器应该足够聪明,以优化这两者,并使它们等效。如果编译器不是一个因素,那么只需查看,并考虑它,我会假设初始化列表。它用它初始化成员变量,而不是必须初始化它然后设置它。它可能只是少量指令,但我会让编译器处理它。