如果我有一个std :: vector,我可以访问一个成员,因为方括号运算符在vector类中被重载。如果我有一个指向矢量的指针,我可以取消引用指针并使用此运算符。但是用箭头 - >运算符它不会让我使用它。例如:解除引用指针时,为什么[]括号不起作用?
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
看来好像 - >箭头运算符引用指针,是否有理由不期望这会工作?或者这只是关于该语言的其中一件事情?
谢谢。
前2个分配可能似乎正常工作,但您正在访问UB以外的容器边界。你需要声明它为'std :: vector myVector(5)',它将分配必要的空间来访问'myVector [4]'后两个是非法的结构 –
doug
这是不正确的语法。箭头运算符给你*对象。结构如此pToVector - > [4] = 0类似于* pToVector。[4] = 0.这条线(pToVector - >)[4]和这个pToVector - > [4]都不起作用 – arturx64
你为什么期望它工作? 'a-> b'表示'(* a).b'。所以,'a - > [b]'可能意味着'(* a)。[]'这是没有意义的。 – HolyBlackCat