读书人

关于C++引用类型的1点疑问

发布时间: 2012-12-14 10:33:07 作者: rapoo

关于C++引用类型的一点疑问


#include<iostream>
using namespace std;
int main()
{
int a=3;
int &p=a;
}

单步调试,因为p是a的引用,所以&p==&a,p==a。
但我发现*p居然也是3,这是为什么?
[最优解释]
引用:
调试器显示问题?编译器应该OK吧。比如


编译没问题的。只是VS调试器Watch窗口的bug

另外比如在VS2008的Watch窗口敲入sizeof(int int)会显示4,这其实因为bug,就算再多敲几个int也一样,这种很明显的问题反而不是问题,但是如果敲入sizeof(long long),其结果就会让用户产生误解了

VS2012已修复了此类问题


[其他解释]
VS吧?

bug

VS2012上已修复
[其他解释]
没人愿意解答吗?
[其他解释]
参考:
C/C++中指针和引用之相关问题研究
[其他解释]
调试器显示问题?编译器应该OK吧。比如

int a = 3;
int& r = a;
*r = 9; //error, since r's type int

引用:
VS吧?

bug

VS2012上已修复

[其他解释]


int main()
{
return 0;
}


[其他解释]


#include "stdafx.h"
#include <iosteam>
using namespace std;

int main()
{
cout<<"插入代码是这样用吗? 测试一下"<<endl;

return 0;
}


[其他解释]
IDE优化的结果,引用从实现上来说就是指针,只不过调试的时候自动根据类型转换了下。
[其他解释]
我使用的是VS2010,貌似就是watch的bug,因为如果我给程序加一句
cout<<*p<<endl;

编译时直接就显示“非法的间接寻址”

读书人网 >C++

热点推荐