现在的位置: 首页 > 综合 > 正文

引用真的是别名吗?

2017年11月08日 ⁄ 综合 ⁄ 共 688字 ⁄ 字号 评论关闭
中秋刚过,深圳依旧热气袭人。今年比较忙,一直没更新文章,今年5月份,我开始学习c++了。几天前辞去了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 

抱歉!评论已关闭.