关于引用指针参数的问题
为什么 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;
}
问题点数:100、回复次数:9Top
1 楼studying(学到老)回复于 2006-12-03 09:32:29 得分 50
因为使用test(&i, &i)的时候,编译器会生成一个临时的int*指针变量。如果将临时对象传递给采用指向对象的引用作为参数的函数,则该引用必须是常数引用。
如果要采用test(&i, &i)的话,那么应该将test函数写成这样:
void test(int* const & i, int* const & j)
{
//因为使用了cosnt,所以这条语句编译通不过
//i = j;
}Top
2 楼gabby1985(咖啡)回复于 2006-12-03 10:00:44 得分 5
恩…… LS MS有道理Top
3 楼wanphonguo()回复于 2006-12-03 10:13:05 得分 0
没看明白,学习中...Top
4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-12-03 10:25:56 得分 20
因为 临时对象 是无法修改的 ...
如果是 test(&i, &i),
则函数应该是:
void test(int* const & i, int* const & j)Top
5 楼abblly(西边日出东边雨)回复于 2006-12-03 11:29:34 得分 5
临时对象还真是个麻烦的东东Top
6 楼OOPhaisky(异化$渴望成功~~)回复于 2006-12-03 12:15:33 得分 10
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本身就是一个临时的指针对象,所以不可以的。Top
7 楼OOPhaisky(异化$渴望成功~~)回复于 2006-12-03 12:17:44 得分 10
如果楼主将test的参数改成const引用就可以test(&i,&i)这样调用了:
void test(int*const& i, int*cosnt& j);//注意const 的位置
Top
8 楼htqx(航天奇侠)回复于 2006-12-03 12:43:15 得分 0
test( int * i ...)
Top
9 楼perfervid(我是2006年度最好的楼主吗?)回复于 2006-12-04 04:07:58 得分 0
多谢各位啊!Top




