如果我有一個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