引用真的是别名吗?

来源:互联网 发布:上海网络广播 编辑:程序博客网 时间:2024/04/27 18:35
中秋刚过,深圳依旧热气袭人。今年比较忙,一直没更新文章,今年5月份,我开始学习c++了。下面来瞧瞧c++的引用类型。

c++源自于c语言,引用是c++的引入的新类型。首先我们要学好如何使用引用类型变量。
1.引用变量的初始化分两类。如果是局部变量或全局变量,定义时需要初始化。如果是作为函数参数或是成员变量,则通过调用函数或构造函数来绑定。
2.引用变量初始化后,在运行时就不能绑定到别的对象了。
3.引用所绑定的对象不能是匿名的,如int& r = 3*4是不允许的。
4.没有引用的引用,也没有指向引用的指针。

看到了c++的引用部分,网上看了看,很多人认为觉得引用就是所绑定的变量的别名。当然,也有文章指出,是常量指针。
看看如下代码:
int a = 3;
int &b = a;
b = 5;
cout << a << endl;

对b初始化后,操作b就和操作a一样,于是乎,想当然地认为是别名了。但仔细分析下,你会惊讶地发现,本质上不是别名。

目前编译器一般是通过指针来实现引用的,因此,引用类型占用了内存空间。
如:
class A{
int& i;
int& j; 
};

在x86下sizeof(A)是8。既然占用空间,那明显就不是别名了。如果你还认为是别名,那不是说大多数编译器都实现错了吗?而实际上,引用是新的类型(通过重载可以看出来),同时标准也没有规定它是否占用了内存。因此不允许有指向引用的内存。

总的来说,引用是c++中的一个语法糖。只是它给程序员带来的坑要远远多于它所带来的甜头。

转载请注明出处:http://blog.csdn.net/booirror 

原创粉丝点击