我知道问为什么?对于这个网站来说是个坏问题,因为我们无法知道。但是我的意思是它作为口语的替代品,有什么可能的原因?
我发现自己写作,
foo->[i];
并且惊讶地发现它不起作用。我打算写:
(*foo)[i];
我确信大多数人已经看到了我的意思,但要明确,我想
bar.subscript(i);
foo->subscript(i);
类似于
bar.operator[](i);
foo->operator[](i);
但似乎并非如此。为什么?我确定我必须以错误的方式看待事情,但我无法弄清楚是什么。我知道的理论很少,所以非常赞赏外行人的解释。
如果我的比喻中没有明显的错误,那么该语言的设计者可能会让操作员离开的原因是什么?这是不明确的? (如果是这样的话,可以误认为是什么?)
根据@ chris的推荐,我想在编辑中加入一些评论,因为我没有像我应该那样清楚:
OP提出了operator-> [],两者的组合。
- chris
他在问为什么他想要的东西不存在,而不是为什么他要写的代码不起作用。
- Matthew'Cogwheel'Orlando
答案 0 :(得分:4)
operator-> 的权利必须是成员的名称。显式 operatorXYZ 计为我猜的成员名称,因此允许使用 foo-> operator [] 。但是, [] 等随机标记不计入成员名称,因此不允许使用 foo-> [i] 。
答案 1 :(得分:3)
该语言的设计人员可能会让操作员离开的原因是什么?
1:没人建议。如果没有提出建议,则不会使用该语言。
2:看起来不对劲。 operator->
可能会返回一个指针,但语言中的 use 是“引用此指针并访问成员”。这就是语言对->
的作用。因此,当有人看到->[]
时,它看起来不正确。 ->
在所有其他情况下右边的东西是某种形式的成员标识符。
3:因为与语言有很多重要的事情,而不是改变这样的小事。
答案 2 :(得分:1)
我想,原因是在C ++中,你很可能会在{C + 1}中使用vector
(或array
而不是指针到C-数组。在以C ++为中心的解决方案中,不需要这样的运算符,因此它可能被认为是编译器的额外工作,同时几乎没有任何好处。
如果你需要一个二维数组,那么foo[0][i]
已经可以用于C数组。