构造函数是函数吗?是否可以调用构造函数

use*_*570 5 c++ constructor function implicit

我发现了这一点,其中一条用户评论说:

构造函数不能被调用,它不是函数。创建新对象时会自动调用它。

我的问题是上述评论是否正确/正确?如果是,那么为什么构造函数不被视为函数,为什么我们不能调用它?

Ben*_*igt 16

正式地,在 C++ 标准中,它(以及其他几个)是一个特殊的成员函数,所以是的,它是一个函数,但它是一个特殊的函数,并非所有正常规则都适用。

没有语法可以编写直接调用构造函数或形成指向它的函数指针的代码。该标准特别指出“构造函数没有名字。 ”

创建对象时,编译器会自动调用构造函数。编译器还将自动调用类对象的子对象(基类和成员)的构造函数。“委托构造函数”是子对象初始化的一种退化情况(在形式代数中,我们说任何集合都是其自身的子集,当我们指的是不是整个集合的子集时,我们说“严格”子集)。

创建对象的方法有很多种,其中一些看起来像函数调用,但这实际上是强制转换并导致创建新对象,编译器在该新对象上隐式调用构造函数。还有一种新的放置语法,除了导致编译器隐式调用构造函数之外,它并没有做太多事情——但即使如此,也会创建一个全新的对象。

编译器对构造函数的隐式调用与用户代码中的显式函数调用不同的一个重要方式是,隐式调用发生在隐式 try/catch 范围内,如果发生异常,将导致子对象被破坏。如果可能的话,直接调用构造函数不会有这种额外的行为。