gpt4 book ai didi

C++ 构造函数 : Using an initializer vs setting the values in the definition

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:54 25 4
gpt4 key购买 nike

因此,在阅读我的一本教科书时,我遇到了构造函数的初始值设定项。我想知道是否存在任何性能差异,哪种是 C++ 通用编码标准的首选方法。

假设:

  • 默认构造函数不接受任何参数(因此不需要验证)
  • 该类有两个私有(private)变量: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);
}



只是为了澄清问题:

  1. 在这两种设置变量的方法中,哪种方法的性能更好?
  2. C++ 中的通用编码标准通常首选一种方法吗?
  3. 你能混合使用这两种方法吗?

最佳答案

没有法律禁止混合使用这两种方法。

PODs的情况下,这两种方法之间不会有任何可测量的差异,并且 C++ 编译器可能会为这两种初始化方法生成相同的代码。

另一方面,如果类成员是更复杂的类,而不是像 int 这样的 POD,则构造函数初始化会产生更好的结果。这只是一个经验法则,实际结果会有所不同,具体取决于每个特定类别。默认构造一个类的实例,然后调用它的赋值运算符,会比直接构造它得到更好的结果,这并非完全不可信。

关于C++ 构造函数 : Using an initializer vs setting the values in the definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com