初始值设定项列表在C++;? 对于C++编程,现在学习构造函数,我是全新的。在我之前读过的一篇关于构造函数的博客文章中,由于性能原因,在初始化类变量时,使用“初始值设定项列表”比在类构造函数的主体内赋值要好。但背后没有任何解释。如果你能解释一下,我将不胜感激

初始值设定项列表在C++;? 对于C++编程,现在学习构造函数,我是全新的。在我之前读过的一篇关于构造函数的博客文章中,由于性能原因,在初始化类变量时,使用“初始值设定项列表”比在类构造函数的主体内赋值要好。但背后没有任何解释。如果你能解释一下,我将不胜感激,c++,c++11,C++,C++11,首先,你的问题不完整。确实有一些具体案例。但为了简单起见: class Foo { ExampleType var; public: Foo(ExampleType x):var(x) { } }; 首先,调用“ExampleType”类的复制构造函数来初始化:var(x),然后调用“ExampleType”的析构函数来初始化“x”,因为它熄灭了。 但在变量赋值的情况下,首先调用构造函数(例如类型),然后调用赋值运算符,然后调用析构函数。区别在于编译器可以在编译时计算

首先,你的问题不完整。确实有一些具体案例。但为了简单起见:

class Foo {
    ExampleType var;
public:
    Foo(ExampleType x):var(x) {

    }
};
首先,调用“ExampleType”类的复制构造函数来初始化:var(x),然后调用“ExampleType”的析构函数来初始化“x”,因为它熄灭了。
但在变量赋值的情况下,首先调用构造函数(例如类型),然后调用赋值运算符,然后调用析构函数。

区别在于编译器可以在编译时计算出(初始值设定项列表),而在体中编写代码需要在运行时执行。这个问题没有意义。带括号的init列表的作用在很大程度上取决于您尝试初始化的类型。因此,谈论此类代码的性能只能针对特定情况,而不是一般情况。有效C++对象的第4项(内置int类型除外)是在主体构造函数执行之前默认构造的,因此,当您在主体构造函数内赋值时,只会覆盖构造的对象(先构造,然后赋值),但初始值设定项列表避免了这个(初始值设定项列表只使用复制构造函数,除非您使用默认构造函数)最简单(过于简化,实际上)我能想到的一个例子是,一般来说,任何未在成员初始值设定项列表中特别初始化的成员都将以默认方式初始化,因此您将为其分配两次而不是一次。实际上并没有这么简单(有些成员需要在初始值设定者列表中进行初始设定,有些成员如果没有明确地进行初始设定,则不会进行默认初始设定),但这让我们大致了解了其中一个好处。