为什么不是 - > []是C ++中的运算符? (解引用数组指针的下标运算符)

时间:2013-01-04 19:10:16

标签: c++ programming-languages operators

我知道问为什么?对于这个网站来说是个坏问题,因为我们无法知道。但是我的意思是它作为口语的替代品,有什么可能的原因?

我发现自己写作,

foo->[i];

并且惊讶地发现它不起作用。我打算写:

(*foo)[i];

我确信大多数人已经看到了我的意思,但要明确,我想

bar.subscript(i);
foo->subscript(i);

类似于

bar.operator[](i);
foo->operator[](i);

但似乎并非如此。为什么?我确定我必须以错误的方式看待事情,但我无法弄清楚是什么。我知道的理论很少,所以非常赞赏外行人的解释。

如果我的比喻中没有明显的错误,那么该语言的设计者可能会让操作员离开的原因是什么?这是不明确的? (如果是这样的话,可以误认为是什么?)


根据@ chris的推荐,我想在编辑中加入一些评论,因为我没有像我应该那样清楚:

OP提出了operator-> [],两者的组合。
- chris
他在问为什么他想要的东西不存在,而不是为什么他要写的代码不起作用。
- Matthew'Cogwheel'Orlando

3 个答案:

答案 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数组。