C ++入門書の5番目の注意事項(第14章オーバーロードされた操作と型変換)添え字演算子[]

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取下标返回的是常量引用
}

おすすめ

転載: blog.csdn.net/thefist11cc/article/details/113928199