13

我知道问为什么?对这个网站来说是个坏问题,因为我们不知道。但是我的意思是,它可以代替询问,有哪些可能的原因?

我发现自己自然而然地写作,

foo->[i];

并惊讶地发现它不起作用。我的意思是写:

(*foo)[i];

我相信大多数人已经明白我的意思,但要清楚,我想

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

将类似于

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

但情况似乎并非如此。为什么?我确定我一定是以错误的方式看待某些事情,但我不知道是什么。我知道的理论很少,所以外行的解释将不胜感激。

如果我的类比没有明显的错误,那么语言的设计者可能将操作员排除在外的一些可能原因是什么?是模棱两可的吗?(如果是这样,那么误认为是什么?)


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

OP 正在提议 operator->[],这是两者的结合。
- 克里斯
他在问为什么他想要的东西不存在,而不是为什么他试图编写的代码不起作用。
——马修“齿轮”奥兰多
4

3 回答 3

4

operator->的权限必须是成员的名字。我猜一个显式的operatorXYZ算作成员的名称,所以foo->operator[]是允许的。但是,诸如[]之类的随机标记不能算作成员的名称,因此foo->[i]是不允许的。

于 2013-01-04T19:20:05.830 回答
3

该语言的设计者可能将操作员排除在外的一些可能原因是什么?

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

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

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

于 2013-01-04T19:26:26.210 回答
1

我想原因是在 C++ 中你很有可能会使用vector(或array在 C++1 中)而不是指向 C 数组的指针。在以 C++ 为中心的解决方案中,不需要这样的运算符,因此它可能被认为是编译器的额外工作,而几乎没有好处。

如果您需要一个二维数组,那么foo[0][i]已经可以使用 C 数组了。

于 2013-01-04T19:27:52.740 回答