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

标签 c++ programming-languages operators

我知道问为什么? 对这个网站来说是个糟糕的问题,因为我们不知道。不过,我的意思是用它作为询问的口语替代,有哪些可能的原因?

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

foo->[i];

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

(*foo)[i];

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

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

类似于

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

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

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


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

The OP is proposing operator->[], a combination of the two.
– chris
He's asking why the thing he wants doesn't exist, not why the code he's trying to write doesn't work.
– Matthew 'Cogwheel' Orlando

最佳答案

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

关于c++ - 为什么 ->[] 在 C++ 中不是运算符? (取消引用数组指针的下标运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163347/

相关文章:

.lib 中的 C++ 静态变量未初始化

language-agnostic - 支持 "partial specialization"的其他语言有哪些?

c++ - 在 C++ 中重载 << 运算符

Java - 与原始数据类型的动态比较

python - 插入符号 (^) 运算符有什么作用?

c++ - 如何在 C++ 中打印希腊字母 delta

c++ - 有没有办法在变量中存储类型说明符?

c++ - 在 CMD 中使用 CreateProcessWithTokenW 启动 CMD

if-statement - 写 `if (foobar == ("this"|| "that") )` to check if foobar is equal to "this"或 "that"是否支持任何主要语言?

node.js - 我是编程新手,我正在学习 node.js,但是在执行 parsedUrl 时,我得到了 [object :null] with the output, 如何修复它