C++指针引用问题,非常量引用的初始值必须为左值
答案:1 悬赏:60 手机版
解决时间 2021-03-06 19:35
- 提问者网友:黑米和小志
- 2021-03-05 18:41
C++指针引用问题,非常量引用的初始值必须为左值
最佳答案
- 五星知识达人网友:由着我着迷
- 2021-03-05 20:12
“非常量引用的初始值必须为左值”,左值基本上可以理解为能对其取地址的值,如果地址都没有,怎么可能作为非常量引用的值呢?如果可以,那么将出现以下情况:
int &a = 5;//5是右值,a是非常量引用
a = 6;//把5这个右值的值改为6,这明显是不合适的
“在参数里取地址再传进去就允许”这个不是很明白你想表达什么,对右值取地址?追问其实是忘记传问题的图片了。。现在弄明白了。有这样一句话,非常量左值引用只能绑定到非常量左值,不能绑定到常量左值、非常量右值和常量右值,那对于func函数来说,func(&a)里面的&a应该算是非常量左值,还是常量右值?所以才不给引用绑定的追答&a是一个右值,你能对&a再取地址吗?肯定是不能的。&a本身就是一个数值,和5、6这些是一样的数值,只不过这个数值是一个地址值而不是一个int值。
int *c = &a;则完全不同了,c本身是一个左值,c是一个变量,c变量存放了&a所代表的值(就好比int a = 5,a存放了5代表的值),c本身也有自己的地址,你可以再对c作取地址操作。追问嗯嗯,这个我明白了,以前我以为&a还有地址的。。那在func(&a)里面,&a是一个非常量左值还是常量右值呢?追答&a是右值,在哪里都是。
右值有常量非常量一说吗?在C++11标准中应该是有的,但是好像和这里的讨论没关系。
int &a = 5;//5是右值,a是非常量引用
a = 6;//把5这个右值的值改为6,这明显是不合适的
“在参数里取地址再传进去就允许”这个不是很明白你想表达什么,对右值取地址?追问其实是忘记传问题的图片了。。现在弄明白了。有这样一句话,非常量左值引用只能绑定到非常量左值,不能绑定到常量左值、非常量右值和常量右值,那对于func函数来说,func(&a)里面的&a应该算是非常量左值,还是常量右值?所以才不给引用绑定的追答&a是一个右值,你能对&a再取地址吗?肯定是不能的。&a本身就是一个数值,和5、6这些是一样的数值,只不过这个数值是一个地址值而不是一个int值。
int *c = &a;则完全不同了,c本身是一个左值,c是一个变量,c变量存放了&a所代表的值(就好比int a = 5,a存放了5代表的值),c本身也有自己的地址,你可以再对c作取地址操作。追问嗯嗯,这个我明白了,以前我以为&a还有地址的。。那在func(&a)里面,&a是一个非常量左值还是常量右值呢?追答&a是右值,在哪里都是。
右值有常量非常量一说吗?在C++11标准中应该是有的,但是好像和这里的讨论没关系。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯