C++ 如果默认构造函数不执行任何操作,其目的是什么?

C++ 如果默认构造函数不执行任何操作,其目的是什么?,c++,C++,我已经读到默认构造函数不执行任何操作(类T的默认构造函数是平凡的(即不执行任何操作),如果某些条件为真,并且我猜这些条件在隐式定义时为真 那么,如果它不执行任何操作,为什么编译器会添加它,为什么类需要它 谢谢!因为编译器只会在需要调用时生成默认构造函数。例如,可以通过派生的类或标准库容器来生成。编译器仍然可以自由地对其进行优化,因为它使用了显式定义的“不做任何事情”函数。它的目的是让对象在f没有合适的构造函数可用 例如: struct Foo{}; struct Bar { Bar()

我已经读到默认构造函数不执行任何操作(类T的默认构造函数是平凡的(即不执行任何操作),如果某些条件为真,并且我猜这些条件在隐式定义时为真

那么,如果它不执行任何操作,为什么编译器会添加它,为什么类需要它


谢谢!

因为编译器只会在需要调用时生成默认构造函数。例如,可以通过派生的
类或标准库容器来生成。编译器仍然可以自由地对其进行优化,因为它使用了显式定义的“不做任何事情”函数。

它的目的是让对象在f没有合适的构造函数可用

例如:

struct Foo{};

struct Bar
{
    Bar() = delete; // no default constructor
};

int main()
{
    Foo f;
//  Bar b;  // does not compile
}

CRT在实例化类时调用构造函数,因此必须存在一个构造函数才能调用它,即使它“什么都不做”如果没有为此提供默认构造函数,编译器将为您生成一个默认构造函数。否则,将无法实例化对象。构造时发生的规则、步骤和顺序只是语言的一部分

即使主体是空的,类的数据成员仍然是在构造时初始化的

也可以考虑如果类是从另一个派生的,在构造时发生了什么。


有关构造函数主题的详细信息,请参阅。

为什么f(x)=0需要x,因为这是数学语言的规则。它是否仍然是函数,与输入无关,我们仍然在函数方面进行讨论,我们仍然可以映射x/y.在C++中,构造函数是语言的一个部分,无论它是否做任何事情,SIMET都是不需要的。hing必须在那里才能被调用。@ChristopherPisz,谢谢。所以你的意思是,语言的一条规则是,无论它是否执行任何操作,都必须有一个构造函数?或者我是否误解了什么?这就是我在采访中的回答。CRT在类实例化时调用构造函数,因此一个人必须存在才能召唤它,即使它“什么都不做”即使主体为空,类的成员数据仍在构造时初始化。有关构造函数主题的详细信息,请参阅。可能存在的重复项,但为什么只有在有构造函数的情况下,类对象才能生效,即使构造函数什么都不做?@JakeBlandon如果没有默认构造函数的概念uctor,你如何创建一个不能默认构造的对象?我想这就是这里的重点。嗯,谢谢你,我想我慢慢明白了重点。那么类是否被编程为总是调用构造函数,因此必须定义构造函数?或者?