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())
。