问一个引用的问题!
admin 发表于 2010-08-28 | 来源:互联网 | 阅读:
int f(){
return 0;
}
int const & g(){
return f();
}
int main(int argc, char* argv[])
{
int k = g();
return 0;
}
以上程序在vc6中编译会出现警告C4172,而且得到的k的值也是不正确的。这个比较好理解!
但是将g改为如下的样子:
int const & g(){
int const & p =f();
return p;
}
却没有报警告,得到的值也是正确的。请问这是为什么?两者有什么区别?谢谢

膜拜一下楼主结贴率———
那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。
悬空?另:楼主的结贴率。。。Csdn 太有才了。
那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。那为什么第一种做法会立即出错?能不能详细讲一下两者的区别!谢谢!
那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。那为什么第一种做法会立即出错?能不能详细讲一下两者的区别!谢谢!完全是因为人品好。
哈哈,牛
编译器原因试试vs2005以上的版本完全跟人品有关系,你的代码没准什么时候就会出错
都错了。
无论怎么说你都是在返回一个临时变量的膜拜一下楼主结贴率———我也膜拜下
可以这样试试C/C++ code
typedef int (&g)();
int f(){
return 0;
}
g=f;
LZ:int const & g(){return f();}你这样做为何不干脆把引用符号去提这样做。int g(){return f();}利用间接调用,或者用函数指定实现
谢谢大家的回答,大家回答的都非常有道理。但是我感到困惑的是,为什么第一种写法每次都是错误的,而第二种写法每次都是正确的?虽然这种问题,很多人都说情况随机,但是在某种特定的编译环境下,得到的结果给人的印象都是确定的。这两种写法在底层来说有没有什么区别?当然从汇编的角度肯定能说明问题,但是一者我的汇编很差,在者难道非要从汇编的角度才能把这个问题说清楚吗?很多C++高阶的书籍也都没有从汇编的角度来说C++的问题呀.比如说《深入C++面向对象模型》。再等待几天吧,没什么结果就结贴给分!