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

And*_*ong 13 c++ programming-languages operators

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

我发现自己写作,当然,

foo->[i];
Run Code Online (Sandbox Code Playgroud)

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

(*foo)[i];
Run Code Online (Sandbox Code Playgroud)

我敢肯定大多数人已经看到了我的意思,但是要清楚,我想

bar.subscript(i);
foo->subscript(i);
Run Code Online (Sandbox Code Playgroud)

类似于

bar.operator[](i);
foo->operator[](i);
Run Code Online (Sandbox Code Playgroud)

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

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


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

OP提议运算符 - > [],两者的组合.
- 克里斯
他问为什么他想要的东西不存在,而不是为什么他试图编写的代码不起作用.
- 马修'Cogwheel'奥兰多

Nic*_*las 3

该语言的设计者可能会遗漏运算符的原因有哪些?

1:没有人提出。如果它没有被提出,它就不会进入语言。

2:看起来不对。operator->可能会返回一个指针,但在语言中的用法是“引用这个指针并访问一个成员”。这就是该语言将要做的事情->。所以当有人看到时->[],它看起来是不正确的。右边的东西->在所有其他情况下,

3:因为与语言有关的事情比改变这样的小事情更重要。

  • `foo->(bar) = baz->[snaf]` -- 哦,别忘了 `foo->++`!哦,还有 `foo->[bar]->[snaf]->[meh] = 7`——想想我们可以从中得到的语法! (4认同)