gpt4 book ai didi

c++ - 类的构造函数是返回类类型的引用还是只是一 block 内存?

转载 作者:行者123 更新时间:2023-11-30 04:06:03 26 4
gpt4 key购买 nike

据我所知,构造函数没有返回类型。但是在下面的这段代码中,看起来ctor确实返回了一个const引用对象(ctor是否有一个const reference aclass的返回类型,它是隐藏的?),(或者)返回一 block const reference(Q1)类型的内存?或者这是别的东西(Q1)? ctor(Q2) 返回的这些对象是否有效,它们是否等同于 c stack_object; (Q2)?请分享您的想法。

#include<iostream>
using namespace std;

class c{
public:
int x = 88;
c(int i){
x=i;
// cout<<"\nc1 ctor\n";
}
c(){
// cout<<"\nc ctor\n";
}
~c(){
// cout<<"\nc dtor\n";
}
};

int f(){
const c & co1 = c(); //ctor returns a const reference obj of type c class
c &ref = const_cast<c&>(co1); //casting away const
cout<<"\n addr3 = "<<&ref<<"\n"; //another new address
ref.x = 99;
//cout<<ref.x;
}


int main(){
const c &co = c(3);
c *p = const_cast<c*>(&co);

cout<<"\n addr1 = "<<p<<"\n";
//cout<<p->x; //out puts 3
p->x = 11; //just assigning some new values

const c & co1 = c();
c *p1 = const_cast<c*>(&co1);

cout<<"\n addr2 = "<<p1<<"\n"; //new address
//cout<<"\n"<<p1->x;

f();

cout<<"\n main() Done\n";
return 0;
}

这里是:

 addr1 = 0xbfc3c248

addr2 = 0xbfc3c24c

addr3 = 0xbfc3c214

main() Done

最佳答案

如您所见,构造函数不返回任何内容;它没有返回类型。

在你的代码中做这样的事情:

const c &co = c(3);

下面的说法是正确的:

The expression c(3) is an rvalue of type c.

但是,您正在创建一个临时对象,并将引用绑定(bind)到它。通常,临时对象的生命周期在该语句/序列点的末尾结束。但是,C++ 标准保证其 lifetime is prolonged .

关于c++ - 类的构造函数是返回类类型的引用还是只是一 block 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23045077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com