vector<string>* v1 = new vector<string>(10, "");
(*v1)[2] = "aaa";
现在我想使用指针v1而不使用箭头操作符取消引用它:
v1->[2] = "aaa"; // DOES NOT COMPILE
我错过了什么?有可能吗?
答案 0 :(得分:1)
正如您所发现的,重载的运算符语法不适用于箭头运算符。但是指定完整的方法名称会:
v1->operator[](2) = "aaa";
也就是说,箭头操作符是解除引用操作符。这两行是等价的:
(*v1).foo()
v1->foo()
我没有看到一个特别好的理由偏爱另一个。
在任何情况下,operator []不是从向量中检索数组项的唯一方法。正如评论中所指出的,调用get()几乎是等价的(它添加了边界检查,但在其他方面是相同的)。