关于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返回的不是引用,而是引用的引用?
我没找到标准中关于返回引用的定义,谁能帮我找找看..
...全文
169 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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或其它的引用
  • 打赏
  • 举报
回复
发帖
C++ 语言
加入

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2006-09-19 09:31
社区公告
暂无公告