Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造函数返回什么?_C++_Constructor_Return Type - Fatal编程技术网

C++ 构造函数返回什么?

C++ 构造函数返回什么?,c++,constructor,return-type,C++,Constructor,Return Type,我的问题是构造函数返回什么?这个问题与“构造函数的返回类型是什么?”没有太大区别 我在某个地方读到过,构造函数隐式地返回一个完整的对象(即隐式返回类型是类的名称),但不应显式地指定它 struct empty{}; int main(){ empty(); //creates a temporary and implicitly a constructor is called } 因此,根据我的解释,隐式返回类型应该是类的名称,在本例中为empty。我的野生解释正确吗?构造函数不返回任

我的问题是构造函数返回什么?这个问题与“构造函数的返回类型是什么?”没有太大区别 我在某个地方读到过,构造函数隐式地返回一个完整的对象(即隐式返回类型是类的名称),但不应显式地指定它

struct empty{};

int main(){
   empty(); //creates a temporary and implicitly a constructor is called
}

因此,根据我的解释,隐式返回类型应该是类的名称,在本例中为
empty
。我的野生解释正确吗?

构造函数不返回任何内容。调用构造函数来初始化对象。构造函数只能用于初始化对象;实际上不能显式调用构造函数(一方面,构造函数没有名称)


在您给出的示例中,
empty()
不是函数调用表达式,而是值初始化。它在C++中创建了一个值为“代码>空的 .

的初始化临时对象,如果我没有记错,您的代码将为栈中的“空”分配足够的空间,然后调用空的默认构造函数(由)指定(隐式)传递该引用。没有回报。在你的例子中,没有构造器

构造函数不返回任何内容。

在创建对象时隐式调用构造函数来初始化正在创建的对象。

构造函数确实返回一些内容。它返回对该指向的对象的引用。因此,构造函数的隐式返回语句如下所示

*this;
这个怎么用

如果创建的类模板是
something
,成员为“泛型”类型,则显式调用泛型类型的默认零参数构造函数(即
generic()
)在类
something
的构造函数中,通过
something
构造函数的赋值运算符和初始化语句初始化泛型成员。构造函数必须返回一些东西,否则我刚才写的那些废话就行不通了。它在我正在读的书中…哈哈

这个呢:

int main() {
const empty &er = empty();
empty *ep = const_cast<empty*>(er); //casting away conentness to make changes in the members
cout<<"\n main ends \n";
//dtor get called here
}
intmain(){
const empty&er=empty();
empty*ep=const_cast(er);//丢弃conentness以更改成员
库特

构造函数不返回任何内容

困惑的根源:

Book *b = new Book();
上面的代码让很多人感到困惑,这造成了一种错觉,即构造函数返回指向新创建对象的指针


当您使用
new
关键字时,编译器会分配所需的内存,然后调用构造函数在分配的内存上创建一个新对象。然后
new
返回指向该内存块的指针。构造函数只创建对象,从不返回任何内容。

嗯,当您调用
new Class()时;
,它返回指向该类实例位置的指针。这就是您所指的吗?相关:从
c++-faq
标记中删除。如果您不同意,请删除。@Invisible:该语句的重要部分是“在某种意义上”:这不完全是实际情况,也不完全正确,但这是考虑构造函数和初始化的好方法-有时,需要在内存中构造已分配的对象是有原因的。显式调用构造函数的想法可能很有说服力-但事实上,即使这样也不起作用。使用“placement new”(放置新)语法。尽管有点不对称,但作为补充的清理操作(析构函数对象,但不释放内存)是一个显式析构函数调用,而不是“位置删除”。在构造函数中(与任何方法一样),通过
this
隐式参数引用对象。指向实例的指针(或者说未初始化内存)是传入的,而不是返回的。当然,通过
this
的引用通常与参数本身一样隐式。那么。对我来说,看起来像是对已创建对象的引用。有点…@doc:Yes。它构造了一个临时终止对象,调用Terminator::say()在该临时对象上,然后销毁该临时对象。临时对象在构造它们的完整表达式结束之前不会被销毁。所有类/结构都有构造函数。在这种情况下,有“默认构造函数”-除非您另有说明,否则每个类型都会得到一个不做任何事的默认构造函数。IIRC,在C++0x中,它将是一个用零填充的隐式默认构造函数。作为另一个海报,
new
分配内存,而不是构造函数。那么,这个语句如何合法呢?:
MyClass=MyClass()
@hkBattousai有很多特殊的规则来处理初始值设定项。不幸的是,这与如何获取类似于从构造函数返回的内容无关。因为构造函数甚至没有名称(这里的类名由声明器的特殊规则处理,而不是由函数调用的后缀表达式处理),您无法引用它的类型,因此“返回类型”(如果有)没有意义。这一点很好,但是常量引用。因此,ctor的行为就像它通过值返回一样。如果它返回常量引用,您可以只
empty&er=const\u cast(empty())