c++的引用变量
inti=0;int&ir=i;为什么在引用的时候赋值右边一定要是变量,i是等于0,难道不能用int&ir=0;请举个有说服力的例子?...
int i=0;
int &ir=i;
为什么在引用的时候赋值右边一定要是变量,i是等于0,难道不能用int &ir=0;请举个有说服力的例子? 展开
int &ir=i;
为什么在引用的时候赋值右边一定要是变量,i是等于0,难道不能用int &ir=0;请举个有说服力的例子? 展开
5个回答
展开全部
如果int &ir=0,表示的是地址为0,而不是引用的意思,声明中有变量赋值的情况,必须把变量作为引用的对象,要不然系统无法识别你的语句是引用还是赋值!
说明:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
ra=1; 等价于 a=1;
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6 ) 不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名.
(7)不能建立引用的引用,不能建立指向引用的指针。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针。
例如:
int n;
int &&r=n;//错误,编译系统把"int &"看成一体,把"&r"看成一体,即建立了引用的引用,引用的对象应当是某种数据类型的变量
int &*p=n;//错误,编译系统把"int &"看成一体,把" *p "看成一体,即建立了指向引用的指针,指针只能指向某种数据类型的变量
(8)值得一提的是,可以建立指针的引用
例如:
int *p;
int *&q=p;//正确,编译系统把" int * "看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q。
注意:学会这种分析方法,把什么看成一体,又把什么看成一体
引用格式:一般在文章的注解中提到或在文中直接写出,也可以加引号(20字以下不用)
说明:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
ra=1; 等价于 a=1;
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6 ) 不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名.
(7)不能建立引用的引用,不能建立指向引用的指针。因为引用不是一种数据类型,所以没有引用的引用,没有引用的指针。
例如:
int n;
int &&r=n;//错误,编译系统把"int &"看成一体,把"&r"看成一体,即建立了引用的引用,引用的对象应当是某种数据类型的变量
int &*p=n;//错误,编译系统把"int &"看成一体,把" *p "看成一体,即建立了指向引用的指针,指针只能指向某种数据类型的变量
(8)值得一提的是,可以建立指针的引用
例如:
int *p;
int *&q=p;//正确,编译系统把" int * "看成一体,把"&q"看成一体,即建立指针p的引用,亦即给指针p起别名q。
注意:学会这种分析方法,把什么看成一体,又把什么看成一体
引用格式:一般在文章的注解中提到或在文中直接写出,也可以加引号(20字以下不用)
展开全部
很肯定的说,不能,
一般情况下定义非const引用时,必须用与该引用同类型的对象初始化,初始化后该引用不能在关联其他对象,所以用右值对非const引用赋值是错的;
但是如果你定义的是const 引用,则可以初始化为不同的对象或者右值,比如const int&a=8;
一般情况下定义非const引用时,必须用与该引用同类型的对象初始化,初始化后该引用不能在关联其他对象,所以用右值对非const引用赋值是错的;
但是如果你定义的是const 引用,则可以初始化为不同的对象或者右值,比如const int&a=8;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是C++规定的,因为它是引用不是值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这里的地址运算符&与指针里的地址运算符用法不同。在这种情况下,只相当于给变量i取了一个别名ir.对这个别名的操作相当于对变量i的操作。C++规定:这种引用变量在声明时一定要初始化(就是要让它代表一个变量),另外这种引用变量声明以后,不能再让它成为另一个变量的别名,就是不能再让它引用另一个变量!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 常数只能作为右值,引用右值需要常引用。
const int &ir = 0; 这是可以的。
非常引用是作为左值得别名存在的,必须用左值初始化。
2. 那个不是赋值,是初始化。引用是没有值的,或者说引用没有“等于什么”的概念,而是一个“相当于”或者“用来代表”的概念。
const int &ir = 0; 也并不是把0赋值给ir,而是让ir来代替0。让ir作为0的一个别名存在。
int &ir = i; 也是一样。变量还是只有i一个,只不过有一个本名i和一个别名ir而已。
const int &ir = 0; 这是可以的。
非常引用是作为左值得别名存在的,必须用左值初始化。
2. 那个不是赋值,是初始化。引用是没有值的,或者说引用没有“等于什么”的概念,而是一个“相当于”或者“用来代表”的概念。
const int &ir = 0; 也并不是把0赋值给ir,而是让ir来代替0。让ir作为0的一个别名存在。
int &ir = i; 也是一样。变量还是只有i一个,只不过有一个本名i和一个别名ir而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询