为什么在取消引用指针时 [ ] 括号不起作用?

Zeb*_*ish -1 c++ arrays pointers vector dereference

如果我有一个 std::vector,我可以访问一个成员,因为方括号运算符在 vector 类中被重载。如果我有一个指向向量的指针,我可以取消引用该指针并使用此运算符。但是使用箭头 -> 运算符它不会让我使用它。例子:

 // Excuse the UB here, it's just for illustration
    std::vector<int> myVector;    
    std::vector<int>* pToVector;
    myVector[4] = 0;                   // Works fine
    (*pToVector)[4] = 0;               // Works fine
    pToVector->[4] = 0;                // Doesn't work
    (pToVector->)[4] = 0;              // Doesn't work
Run Code Online (Sandbox Code Playgroud)

好像 -> 箭头运算符取消了指针的引用,是否有理由不期望这会起作用?或者它只是关于语言的那些事情之一?

谢谢。

Whi*_*TiM 5

std::vector<int> myVector;    
std::vector<int>* pToVector;
myVector[4] = 0;                   // Works fine.
(*pToVector)[4] = 0;               // Works fine
pToVector->[4] = 0;                // Doesn't work
(pToVector->)[4] = 0;              // Doesn't work
Run Code Online (Sandbox Code Playgroud)

如果必须使用指向对象的指针来访问对象类的重载运算符,则必须显式调用它。

pToVector->operator[](4)
Run Code Online (Sandbox Code Playgroud)

...顺便说一下,访问外部索引myVector.size()是未定义的行为。这包括代码中带有注释注释的语句 about // Works fine