关于引用指针参数的问题

perfervid 2006-12-03 08:14:25
为什么 test(&i, &i); 会错?谢谢!

void test(int*& i, int*& j)
{
i = j;
}

int main()
{
int i = 0;
int* j = &i;
test(j, j);//test(&i, &i);
return 0;
}
...全文
238 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
perfervid 2006-12-04
  • 打赏
  • 举报
回复
多谢各位啊!
htqx 2006-12-03
  • 打赏
  • 举报
回复


test( int * i ...)
OOPhaisky 2006-12-03
  • 打赏
  • 举报
回复
如果楼主将test的参数改成const引用就可以test(&i,&i)这样调用了:
void test(int*const& i, int*cosnt& j);//注意const 的位置
OOPhaisky 2006-12-03
  • 打赏
  • 举报
回复
void test(int*& i, int*& j);
int main()
{
int i = 0;
int* j = &i;
test(j, j);//test(&i, &i);
return 0;
}
---------------------------------------------------------------------------------
注意看你的test函数的参数类型,他们是引用类型(而且是non const引用),只不过他们引用的是指针而已。
而non const引用是不能够绑定到临时对象上的,而&i本身就是一个临时的指针对象,所以不可以的。
abblly 2006-12-03
  • 打赏
  • 举报
回复
临时对象还真是个麻烦的东东
jixingzhong 2006-12-03
  • 打赏
  • 举报
回复
因为 临时对象 是无法修改的 ...

如果是 test(&i, &i),
则函数应该是:
void test(int* const & i, int* const & j)
wanphonguo 2006-12-03
  • 打赏
  • 举报
回复
没看明白,学习中...
gabby1985 2006-12-03
  • 打赏
  • 举报
回复
恩…… LS MS有道理
AI风 2006-12-03
  • 打赏
  • 举报
回复
因为使用test(&i, &i)的时候,编译器会生成一个临时的int*指针变量。如果将临时对象传递给采用指向对象的引用作为参数的函数,则该引用必须是常数引用。
如果要采用test(&i, &i)的话,那么应该将test函数写成这样:
void test(int* const & i, int* const & j)
{
//因为使用了cosnt,所以这条语句编译通不过
//i = j;
}

64,642

社区成员

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

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