这样使用引用会产生隐藏对象吗?

tkminigame 2009-06-13 12:49:39
void A(int* p){
int& a= *(int*)p;
}
int _tmain(int argc, _TCHAR* argv[])
{
int* p = new int();
A(p);
}
...全文
21 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tkminigame 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 neohope 的回复:]
void A(void* p){
int& a= *(int*)p;
cout < <a < <endl;
}

int& a= *(int*)p;
问题在这里,你把非指针当指针用,还用错了
int *a=(int*)p;
[/Quote]

你搞错我的意思了。我这个想讨论的是错误的类型引用会造成怎样的不可预知的结果?假设a是某接口,这样用会埋下严重的隐患。引用是不是不应该指向堆。。。
lpf000 2009-06-15
  • 打赏
  • 举报
回复
强制转换 可能产生临时对象吧,
lpf000 2009-06-15
  • 打赏
  • 举报
回复
你的意思是?
编译器内部实现引用其实也是占内存的类似指针
neohope 2009-06-15
  • 打赏
  • 举报
回复
void A(void* p){
int& a= *(int*)p;
cout < <a < <endl;
}

int& a= *(int*)p;
问题在这里,你把非指针当指针用,还用错了
int *a=(int*)p;
andylovecandy 2009-06-14
  • 打赏
  • 举报
回复
是临时对象吧?
kingstarer 2009-06-14
  • 打赏
  • 举报
回复
就一个基本类型哪来对象之说

你把引用看成是指针就可以解释程序的输出了
superbtl 2009-06-14
  • 打赏
  • 举报
回复
是引用吧 隐藏式C++多态的时候的一个名词啊 是父类与子类的
中才德创 2009-06-14
  • 打赏
  • 举报
回复
up
tkminigame 2009-06-14
  • 打赏
  • 举报
回复
我觉得不能够吧引用当成一个指针,因为编译器肯定不会把引用当指针处理。引用最贴切的说明是异名(alias),事实上大多数引用就是这么用的。

这里主要不是讨论引用是什么,而是那些错误产生的原因。我不得不重新考虑所有我用过引用地方的疏漏。
tkminigame 2009-06-13
  • 打赏
  • 举报
回复
这样写
void A(void* p){
int& a= *(int*)p;
cout<<a<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
float* p = new float(1.1111f);
A((void*)p);
}
产生的结果
1066285190
Press any key to continue . . .


这样写
void A(void* p){
float& a= *(float*)p;
//a=a+1.0f;
cout<<a<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int* p = new int(10);
A((void*)p);
cout<<*p<<endl;
}

产生的结果

1.4013e-044
10
Press any key to continue . . .


把注释那行去掉后再跑的结果

1
1065353216
Press any key to continue . . .


怎么解释

tkminigame 2009-06-13
  • 打赏
  • 举报
回复
如果
int i;
float& a= i;
这样就会产生隐藏对象,书上这么写的,不过我这里编译器通不过。
但这样写是可以的

void A(void* p){
float& a= *(float*)p;
}
tkminigame 2009-06-13
  • 打赏
  • 举报
回复
这样写的,抱歉开始弄错了
void A(void* p){
int& a= *(int*)p;
}
int _tmain(int argc, _TCHAR* argv[])
{
int* p = new int();
A((void*)p);
}
  • 打赏
  • 举报
回复
引用产生隐藏对象?
没听过,什么意思?
pengzhixi 2009-06-13
  • 打赏
  • 举报
回复
你是说临时对象吧.我这没产生.

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧