C++数组元素为什么不可以是引用?说出最说服力的原因……

Paradin 2008-05-25 10:46:14
int i, j;
int & arr[] = {i, j};

//use arr...
...全文
2369 94 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
94 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjieest 2012-10-08
  • 打赏
  • 举报
回复
遇到过这样的...
obj *a,*b,*c;
obj** p[3]={&a,&b,&c};

只是最后使用的时候还需要强制类型转换....

((obj*)*p[i])->methods()....

感觉麻烦...不过又没有好的方式通用...
haibocui 2012-07-10
  • 打赏
  • 举报
回复
引用即别名,不占内存,在数组中存引用就是非法,虽然在底层引用是用指针实现的,但概念上得达到引用是别名的目的,所以编译器会把数组中存引用认定为非法
jasondmy 2010-09-20
  • 打赏
  • 举报
回复
谢谢分享~~
minmin0876 2010-09-20
  • 打赏
  • 举报
回复
我在不小心点击鼠标的时候 给77楼丢了个板砖 不好意思啊
不是有意的
love277369986 2010-04-05
  • 打赏
  • 举报
回复
以上贴作废,本人理解错了。。int (&arr)[]是对数组的引用了,而不是数组元素类型为int &的数组,继续潜水。。。。
love277369986 2010-04-05
  • 打赏
  • 举报
回复
我觉得只有45楼的说法是比较正确的,当然12楼理论上也是蛮合理的~说数组空间连续的都是比较合理的,我认为45楼合理~是因为她定义了int (&arr) []=..这才真正定义了一个数组元素为int &引用类型的数组吧?
要注意到运算符的优先级?
这只是小弟的浅见,欢迎大家拍砖~- -~
还有楼主的问题是C++数组原始问什么不可以是引用?好像有点歧义
是1,C++数组的数组元素的类型不可以是引用类型,如int (&arr)[5]
还是2,C++里面的一个数组中不可以存放引用类型的变量,如int i,j;
int & x=i,y=j;
int arr[]={x,y}不成立?
我想先问清楚是问题一还是问题二?额......
taodm 2008-05-30
  • 打赏
  • 举报
回复
[Quote=引用 87 楼 cunsh 的回复:]

char& arr[5];

sizeof(arr[0]) = ?
sizeof(arr) = ?
siseof(arr) / sizeof(arr[0]) = ?
[/Quote]

sizeof(void)?????
sizeof(arr)亦可如此。
达成自相容的路不只一条,C++只不过选择了现在这条。
cunsh 2008-05-30
  • 打赏
  • 举报
回复

char& arr[5];

sizeof(arr[0]) = ?
sizeof(arr) = ?
siseof(arr) / sizeof(arr[0]) = ?
lllanm 2008-05-29
  • 打赏
  • 举报
回复
实用吗?? 用法 用例 能简化程序, 能使运行速度加快 有什么值得研究的地方??
haokongdashi 2008-05-29
  • 打赏
  • 举报
回复
还没有想这么深奥的问题。
lauxp 2008-05-29
  • 打赏
  • 举报
回复
我觉得:
引用是别名,
编译器看到的是一个引用声明(注意,严格意义上讲不存在引用的定义),你不能获取一个引用到底被安排在那里,是个什么东西,当然大部分可能会实现为指针
至于数祖,是一个定义,一段空间,用来存储东西的,存放引用干什么,存放编译器才知道的引用有什么意义?
「已注销」 2008-05-29
  • 打赏
  • 举报
回复
learning...
lyle3 2008-05-29
  • 打赏
  • 举报
回复
学习~
fuqd273 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 arong1234 的回复:]
简而言之,12楼说的最貌似一个合理的原因。但是要说这一定能说服所有人,则不一定。

原因很简单,不是所有东西都有可信服的原因的。这只是C++语言的一个规定而已,可能是当时的写标准的人基于已经实现的东西达成的一个妥协,也许当时没有几个人认为“引用的数组”很有必要(我现在都认为无必要)。为什么需要把一个没什么大用处的东西加入标准了来增加编译器的复杂度呢?

所以,世界是不完美的,不是所有的东西都有“合…
[/Quote]

顶,这才是最大的理由
fly4free 2008-05-29
  • 打赏
  • 举报
回复
再次另外:
无论是那个高级语言的引用的汇编级实现还是相当于c/c++语言中的指针。变成机器代码过程中的过程不一样而已。
如此这样,还要硬去实现,有什么意义吗?
candy110 2008-05-29
  • 打赏
  • 举报
回复
MARK~~
cppscript 2008-05-29
  • 打赏
  • 举报
回复
你那个引用
要引用多少个元素
编译器自己之前能确定下来吗
建议多研究一下引用的实质
cppscript 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gofqjyie 的回复:]
晕,你的类型好歹也要匹配啊!
这种用法绝对错误.
[/Quote]
fly4free 2008-05-29
  • 打赏
  • 举报
回复
指针数组的元素可以为null

可是C++的引用规定了一旦确定,不可更改。

如此这般,两个规定有冲突。所以……按照标准是不可以的

但,如果C++可以重新改变引用……

貌似C#就给实现了~呵呵。没必要。

另外,个人觉得,C++的引用是编译时确定,是别名,有点类似define,但有类型检查。
(此“另外”可以随意无视~)
antimatterworld 2008-05-29
  • 打赏
  • 举报
回复
补充:《深度探索C++对象模型》高深的很,这本书可能详细讲解了引用的知识
暂时还没看呢。
加载更多回复(74)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧