语法很简单,虽然简单我再啰嗦一下。
int& 就是声明一个int的引用类型。
int value;
int& ref = value;
这样就顺利通过编译。如果引用没初始化则编译器拒绝编译过去,知道你引用的是实际存在的变量。
有人会写下这样的代码 int& ref = 1;这时候编译器拒绝了他,因为编译器找不到常量1的地址,于是这时候可以得到一个结论引用的变量必须有一个实际的地址。
在const & 的时候就有差别了
先说一下相似的
int value;
const int & ref = value;
ref = 1;//编译器毫不留情的拒绝此语法。因为ref是const的,不能改写。
但对ref取值的时候则就是value的值。value变ref也跟着变,但不得对ref进行赋值。
接下来就是最大区别的地方了
const int& ref = 1;
编译器接受了这样的语法。这有问题么?没问题,这是一个特别的规定
会这样处理
int no_name_value = 1;
const int& ref = no_name_value;
这跟上面的代码类型,但区别在于no_name_value这个变量你是不能使用的,根本看不到有这个变量的存在。
但确实编译器会这样处理,增加了一个没有任何名字的变量,然后让这个const& 去引用他。
记住最重要的一点,no_name_value和ref的生存周期是同步的。两个存在同时销毁。
我们用一个简单的例子演示一下。
结果如下
begin
构造函数Value=2
print Value=2
end
析构函数Value=2
是不是const&很特别的呢;