问一个引用的问题!
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;
}
却没有报警告,得到的值也是正确的。请问这是为什么?两者有什么区别?谢谢

已经有11 个评论
  1. 96789123 说:

    膜拜一下楼主结贴率———

  2. lchz 说:

    那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。

  3. cxjasx 说:

    悬空?另:楼主的结贴率。。。Csdn 太有才了。

  4. kook 说:

    那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。那为什么第一种做法会立即出错?能不能详细讲一下两者的区别!谢谢!

  5. 天天累 说:

    那时栈还没有被覆盖,很危险的操作。再调用一次就完蛋了。那为什么第一种做法会立即出错?能不能详细讲一下两者的区别!谢谢!完全是因为人品好。

  6. kook 说:

    哈哈,牛

  7. weiwei 说:

    编译器原因试试vs2005以上的版本完全跟人品有关系,你的代码没准什么时候就会出错

  8. 96789123 说:

    都错了。

  9. 红烧生鱼片 说:

    无论怎么说你都是在返回一个临时变量的膜拜一下楼主结贴率———我也膜拜下

  10. lchz 说:

    可以这样试试C/C++ code
    typedef int (&g)();
    int f(){
    return 0;
    }
    g=f;
    LZ:int const & g(){return f();}你这样做为何不干脆把引用符号去提这样做。int g(){return f();}利用间接调用,或者用函数指定实现

  11. aw3fae 说:

    谢谢大家的回答,大家回答的都非常有道理。但是我感到困惑的是,为什么第一种写法每次都是错误的,而第二种写法每次都是正确的?虽然这种问题,很多人都说情况随机,但是在某种特定的编译环境下,得到的结果给人的印象都是确定的。这两种写法在底层来说有没有什么区别?当然从汇编的角度肯定能说明问题,但是一者我的汇编很差,在者难道非要从汇编的角度才能把这个问题说清楚吗?很多C++高阶的书籍也都没有从汇编的角度来说C++的问题呀.比如说《深入C++面向对象模型》。再等待几天吧,没什么结果就结贴给分!

我要评论

评论功能因故关闭!

请加入我们的QQ群一起参与讨论:群号59400482(500人超级群)


返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明