1.設計基準
- メンバー関数として定義する必要があります。
- 通常、アクセスされた要素への参照を返すため、代入演算子のいずれかの側に添え字を表示できます
2.2つのバージョンが一般的に定義されています。
- 通常の参照を返します。
- クラスの定数メンバー。定数参照を返し、返されたオブジェクトに値が割り当てられないようにします。
class StrVec
{
public:
std::string& operator[](std::size_t n)
{
return elements[n]; }
const std::string& operator[](std::size_t n) const
{
return elements[n]; }
private:
std::string *elements; // pointer to the first element in the array
}
3.定数参照を返す場合、返されたオブジェクトに値を割り当てることはできません
const StrVec cvec=svec; //把svec的元素拷贝到cvec中
//如果svec中含有元素,对第一个元素运行string的empty函数
if(svec.size()&&svec[0].empty){
svec[0]="zero"; //正确:下标运算符返回string的引用
svec[0]="Zip"; //错误;对cvec取下标返回的是常量引用
}