【发布时间】:2016-07-20 10:02:05
【问题描述】:
阅读我的一本教科书后,我发现了构造函数的初始化程序。我想知道是否存在任何性能差异,以及哪种方法是 C++ 通用编码标准的首选方法。
假设:
- 默认构造函数不带任何参数(因此不需要验证)
- 该类有两个私有变量:int a 和 int b
- 两个变量都需要设置为0
例子:
//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);
}
只是为了澄清问题:
- 在设置变量的两种方法中,哪种方法对性能更好?
- 对于 C++ 中的通用编码标准,是否通常首选一种方法?
- 可以混合使用这两种方法吗?
【问题讨论】:
-
如果你投了反对票,请告诉我你为什么投反对票。我觉得这是一个不是基于意见的问题,因为我正在寻找规则和性能。
-
如果我没记错的话,主要区别是初始化发生的时间。当你使用初始化列表时,类成员将根据类声明中的顺序进行初始化,然后执行 constrictor。在第二种情况下,一切都将在构造方法中初始化。
标签: c++ constructor initialization