gpt4 book ai didi

c++ - 初始化列表与初始化方法

转载 作者:太空狗 更新时间:2023-10-29 23:36:35 25 4
gpt4 key购买 nike

在 C++ 中至少有两种初始化类的方法。

(1) 初始化列表

struct C
{
int i;
C() : i(0) {}
};

(2)初始化方法

struct D
{
int i;
C() { init(); }
void init() {
i = 0;
}
};

我需要不时地重新初始化我类(class)的对象。使用第二种解决方案,我可以简单地调用 obj.init()。对于第一个解决方案,我要么必须添加一个 init() 函数,它基本上复制初始化列表效果,要么使用 obj = C()

对于哪种变体更好,是否存在或多或少的共识?使用初始化方法是否有缺点(除了可能的性能损失 mentioned in the C++ FAQ )。

最佳答案

主要区别在于不使用初始化列表,而是创建成员然后为它们赋值。当您使用初始化列表时,成员是使用给定值直接创建的。

当使用初始化很重要时,其中一种情况是您的类将一些引用作为成员持有,并且有必要在构造这些成员时立即对其进行初始化:

class A
{
public:
A(B& bRef) : bRef_(bRef) { }
private:
B& bRef_;
}

这个问题也可以帮助你:In this specific case, is there a difference between using a member initializer list and assigning values in a constructor?

您的 init() 方法完全没问题。正如您自己提到的,您希望在构造此类的实例时比第一次初始化这些成员更多次,因此为了可重用性和简单性,将其保留在方法中是正确的。 除非确实需要,否则不要尝试提高代码的性能。

有人说快速编写正确的程序比编写正确的快速程序更容易。;)

关于c++ - 初始化列表与初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689227/

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