【发布时间】:2012-12-19 06:11:18
【问题描述】:
我知道问为什么? 对这个网站来说是个糟糕的问题,因为我们不知道。不过,我的意思是用它作为询问的口语替代,有哪些可能的原因?
我自然而然地发现自己在写作,
foo->[i];
并惊讶地发现它不起作用。我的意思是写:
(*foo)[i];
我相信大多数人已经明白我的意思,但要清楚,我想
bar.subscript(i);
foo->subscript(i);
类似于
bar.operator[](i);
foo->operator[](i);
但这似乎并非如此。为什么?我确定我一定是以错误的方式看待某些事情,但我不知道是什么。我知道的理论很少,所以外行的解释将不胜感激。
如果我的类比没有明显的错误,那么语言的设计者可能将操作符排除在外的一些可能原因是什么? 是否模棱两可? (如果是这样,会误认为是什么?)
按照@chris 的建议,我想在编辑中加入一些 cmets,因为我并没有像我应该做的那样清楚:
OP 提出 operator->[],两者的结合。
– chris
他问的是为什么他想要的东西不存在,而不是为什么他试图编写的代码不起作用。
– Matthew 'Cogwheel' Orlando
【问题讨论】:
-
一个有趣的问题是“会很难解析”。我不知道这个问题的答案。
-
@Yakk,我怀疑它是否有效。我正要对此发表评论。
-
因为当时没有人想到它,也没有人足够关心它来使其成为标准。这就是 99% 的“X 看起来不错,为什么 C++ 没有 X”问题背后的原因。对于这样的问题尤其如此:告诉人们写
(*x).[i]而不是x->[i]要容易得多,而不是完成更改标准文本、测试它、确保没有可怕的疏忽等所有工作... -
我喜欢这个问题问为什么不“foo->[i];”但随后使用正确的“foo->operator[](i);”在解释为什么它应该起作用。
-
@GManNickG:我遇到了我不得不使用
.operator->()形式的代码(迭代器包装器),所以人们也应该知道这是一个选项.
标签: c++ programming-languages operators