C++-C++中数组的元素好像不能是引用类型?

发布于 2016-12-30 20:59:26 字数 94 浏览 1394 评论 4

C++中数组的元素好像不能是引用类型,为什么呢?好像编译程序将引用变量编译为指针变量,而指针变量的值就是被引用的变量的存储地址。如果真是这样,那为什么数组元素不能是引用变量?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甜柠檬 2017-10-01 09:58:58

你说的这个情况不存在,是不是你的代码写错了,下面是我写的测试代码,可以编译通过

int a;
int *b[1];
b[0]=&a;

想挽留 2017-09-08 08:13:18

引用是没有空引用这个概念的,否则他跟指针的概念就重叠了。也就是说引用的对象一定存在,假如c++容器可以存放引用,那就会变成非常不稳定不安全的语言,你无法确保你引用的对象是否存在(可能被堆栈清理了),程序执行变得不稳定。跟其他在虚拟机(如java,dot net)的语言不同,他们是将对象生命周期都交给运行环境来管理(gc机制),这样就可以将引用放到容器。

想挽留 2017-08-10 11:50:46

这是编译器一种自我保护的方法吧。因为数组的存储空间是在编译的阶段就确认的,比如,int a[8];编译阶段,在栈中就会申请32字节的内存。但是,紧跟着32个字节之后的内存,存的可能是调用函数的基指针,参数信息等等。如果引用这么用的话,可能会是堆上的空间引用了这个地址,很容易造成空间管理的混乱,生存期的管理等等等等一系列很蛋疼的问题。。

晚风撩人 2017-08-01 00:07:05

当然不可以。如果可以是引用的话,首先引用是没有空引用这个概念的,所以你一定的给它赋值。但即使你给他初始化了,例如
int i = 3;
int j = 4;
int &a[] = {i,j};
数组的内存空间是连续存储的,数组的实现方式其实就是指针。数组名就是数组的首地址,后面都是通过指针运算来取得数组里的每一个值的。即我们可以通过指针计算来找到数组指向的值。
a[1] 是等同于(a + 1);
假设i的地址是 0x20ff44; j的地址是 0x30ff44;
如果&a[0] 即数组a的首地址是 i的地址0x20ff44。
那么a+1将是 0x20ff48。那么
(a+1)的值并不是j的值啊。这不错乱了。除非你保证,i,j的地址是连续的。这谁知道呢。所以编译器这么做,是在减少程序员的麻烦。
但声明一个引用指针是可以的,如下。
int ival = 1;
int *pi = &ival;
int *&pi2 = pi;

const int ival = 1024;
const int * const &pi_ref = &ival;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文