为什么operator[]只接受一个参数?

5

与operator[]只接受一个参数相关的问题有很多,但我找不到一个实际说明原因的问题。

例如,让matrix[0, 3]调用ElementT& operator[](SizeT x, SizeT y)函数似乎是语言的自然扩展。

是否有任何特定的原因(例如不兼容性)使得这种语法不在语言中,或者除了缺乏动力之外,还有什么阻止它被添加的东西?

(注意:这被标记为重复,但它不是。这个问题是“为什么这种语法不在语言中?”而不是“我该如何解决这个问题?”正如提到的那样,有很多问题涉及后者,但没有回答前者的问题。)


3
可能与a[1,3]已经是有效语法有关,因为逗号在此处被视为逗号运算符。 - T.C.
https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/tOJx2TcHpH0 - chris
C++中的运算符重载不能真正改变重载运算符的基本工作原理,并且C++中没有接受多个值的[]运算符。 - Some programmer dude
3
@FredOverflow 这个问题不是重复的,我已经解释过了。 - user673679
3
我问了关于一种特定语言的一个特定设计特性的具体问题,得到了一个明确的答案。这不仅仅是一个讨论话题,也不是重复的内容。 - user673679
显示剩余2条评论
1个回答

4

不仅逗号运算符在这种特定情况下很少使用,而且它是一个阻碍,需要长时间的过渡期才能将其标准化。我们已经有了另一种被人们广泛使用的解决方案:

ElementT& operator()(SizeT x, SizeT y)

一些矩阵库在使用这种格式。虽然有点丑,但这就是C++的特色 :)

还有其他人使用(或也使用)代理,所以您可以将它们链接在一起。 - Deduplicator
谢谢,我(幸福地)已经完全忘记了逗号运算符。 - user673679

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接