这是一个关于C语言引用的问题
我想测试引用的用法,敲了以下代码
int main()
{
/*List tou;
InitList(tou);
List shou;
InitList(shou);
*/
int &a=1;
int b=2;
int &c=b;
getch();
return 0;
}
编译后出现下面错误
--------------------Configuration: 线性表 - Win32 Debug--------------------
Compiling...
线性表.cpp
E:\数据结构\线性表.cpp(46) : error C2440: 'initializing' : cannot convert from 'const int' to 'int &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.
线性表.exe - 1 error(s), 0 warning(s)
我感觉非常奇怪的,首先这个转换错误出现一次,证明只有一次赋值出错。根据以往经验,我判断是&a=1出错。出错原因就是整型变量转化成引用整型,不合法。
&c=b也是整型变量转化成引用变量,为啥就合法了呢?
其实我认为没必要纠结,其实在c++开发中用到引用最多的地方是作为函数参数,引用作为函数参数,此时形参就是实参,或者作为函数返回值,总体而言都是少了对象的拷贝,增加了效率。
int &a=1;是常数转换成整型变量的引用,所以不行。而&c=b中,b是一个变量,所以可以引用。
建议看下引用的定义奥,还以往经验
它是某个已存在变量的另一个名字
引用作为变量的别名而存在,不能直接赋值常量,int &c=b;表示c就代替b了,只是换了个名字而已,以后你用c就等于用b,你int &a=1;啥意思?编译器不知道a应该代替谁了,肯定会出错
为什么我的连&c=b都不能运行,运行出错
了解一下引用,常引用?简单的说一下。
int &c= b; 这种是普通类型的引用,引用类型匹配。
int &a=1; 这种事对常量进行引用,本质会创建一个临时的变量1,但是这个临时变量的声明周期极短,而你后面还是用,肯定失败。可以通过
在前面加const的形式来延长临时变量的声明周期。
建议看一看c++ primer这本书。引用部分。