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)
好像 -> 箭头运算符取消了指针的引用,是否有理由不期望这会起作用?或者它只是关于语言的那些事情之一?
谢谢。
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。
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |