c++引用有没有存储空间?
问题来自于引用与指针的区别有哪些?
答案:
1、引用定义的时候必须初始化,不能为空,也就是说必须和某对象绑定,且不能易主。但是指针可以为NULL,也可以想指谁指谁(所以他事儿多,哈哈)。
2、引用比指针更安全,引用就是一个别名,比较本分。指针就不安分了,多个指针指向同一对象,通过任何一个指针析构了对象的话,其他指针就变得非常危险(俗称野指针)。野指针得危害大大滴。
引用必须初始化,我就不初始化能咋地,也不咋地,编译不过呗,哈哈
那指针有存储空间,引用有吗?
按理说引用只是个别名呀,是不是就没给他分配空间呢,打印一下他的地址吧!
int a = 1;
int &b = a;
printf("a: %x",&a);
printf("b: %x",&b);
一样的,b的地址就是a的地址,那他应该没有存储空间吧。我不甘心!
int a = 1;
struct tag{
int &b;
};
struct tag c = {a};
printf("%d\n",sizeof(c));
打印结果为4,这个结构体中只有一个引用,如果引用不占空间的话,这个结构体对象就应该不占内存,事实并不是这样。结果为4,正好是一个指针大小,int a也是4个字节,再来一次
double a = 1.0;
struct tag{
double &b;
};
struct tag c = {a};
printf("%d\n",sizeof(c));
打印结果还是4,我猜测这个引用的存储空间和指针占用的存储空间一样大。
但是编译器好像不想让我们找见引用的地址,可能是为了安全吧。