关于C++引用类型的一点疑问
#include<iostream>
using namespace std;
int main()
{
int a=3;
int &p=a;
}
单步调试,因为p是a的引用,所以&p==&a,p==a。
但我发现*p居然也是3,这是为什么?
[最优解释]
编译没问题的。只是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
[其他解释]
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;
编译时直接就显示“非法的间接寻址”