#include<vector>
#include<iostream>
class A {
private:
std::vector<int> v_;
protected:
int& operator[](int idx) { return (v_.at(idx)); }; //[1]
public:
A(): v_(5) {}
const int& operator[](int idx) const {return (v_.at(idx)); }; //[2]
};
int main() {
A myA;
const A myB;
//std::cout << myA[1] << std::endl; //does not work [3]
std::cout << myB[1] << std::endl; //does work [4]
}
假设我想让operator[]
以下列方式工作:
i
的 [2]
元素。operator[]
将一些数据写入向量。 [1]
使用这些签名,我无法定义非const对象并访问它[3]
。但是,如果我删除受保护的接口[2]
,则行[3]
将起作用。为什么会这样?
那么我有什么选择来达到预期的行为?我是否必须将v_
移至protected
并直接从我的子类中进行评估?