关于C++中引用的问题~~~

redleaves 2006-09-19 09:31:07
class A {
public:
A(int a) {}
void foo() const {}
...
};
const A &func() {...}
这里func返回的算是引用吧?
如果这里我在函数里写
return 1;
就算是返回临时对象的引用了吧.
通常我们都会认为在函数结束时,这个临时对象就应该销毁了.所以认为这种代码是要出错的.
但在C++标准里,如果临时对象被绑定到引用,那么,这个临时对象的生命周期就要延长到引用结束.
如果我写
func().foo();
那这时,func()产生的引用一直存在,直到这个表达式结束.所以这时,应该是在这个表达式结束之后(foo被调用之后)才销毁临时对象.可是好像所有的编译器都在函数返回时就销毁了对象.
难道func返回的不是引用,而是引用的引用?
我没找到标准中关于返回引用的定义,谁能帮我找找看..
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oversense 2006-09-20
  • 打赏
  • 举报
回复
class c{
int i_;
public:
c(int i){
printf("c\r\n"); i_ = i;
}
~c(){
printf("~c\r\n"); i_ = -1;
}
void foo() const{
printf("foo,%d", i_);
}
};
class a{
public:
const c & c_;
a() : c_( c(1) )
{
}
};

int main()
{
a _1;
_1.c_.foo();
}

上面的程序在
intel C++ Compiler 8.0 下输出
c
~c
foo,-1

vc7.1,vc8.0下输出
c
foo,1244884

gcc 3.4.2 (mingw-special)下输出
c
~c
foo,-1
redleaves 2006-09-20
  • 打赏
  • 举报
回复
没人理....结了算了....
Oversense 2006-09-20
  • 打赏
  • 举报
回复
哈哈,看看下面的程序的输出,就更加迷茫了,迷茫...
在vc2005中,~()永远没有被调用

class c{
int i_;
public:
c(int i){
printf("c\r\n"); i_ = i;
}
c(const c& r){
printf("copy\r\n"); i_ = r.i_;
}
~c(){
printf("~c\r\n"); i_ = -1;
}
};
class a{
private:
const c & c_;
public:
a() : c_( c(1) )
{
}
};

int main()
{
a _1;
}
Jokar 2006-09-19
  • 打赏
  • 举报
回复
偶一般只在类的member function 中返回data member或其它的引用

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧