14.5 下标操作符
可以从容器中检索单个元素的容器类一般会定义下标操作符,即operator[].
注解:下标操作符必须定义为类成员函数。
1 提供读写访问
定义下标操作符比较复杂的地方在于,它在用作赋值的左右操作时都应该能表现正常。下标操作符出现在左边,必须生成左值,可以指定引用作为返回类型而得到左值。只要
下标操作符返回引用,就可用做赋值的任意一方。
可以对const和非const对象使用下标也是个好主意。应用于const对象时,返回值应为const引用,因此不能用做赋值的目标。
类定义下标操作符时,一般需要定义两个版本:一个为非const成员并返回引用,另一个为const成用并返回非const引用。
2 原型下标定义
class Foo {
public:
int &operator[] (const size_t);
const int &operator[](const size_t)const;
private:
vector<int> data;
};
下标操作符
int& Foo::operator[] (const size_t index)
{
return data[index];
}
const int & Foo::operator[] (const size_t index) const
{
return data[index];
}
可以从容器中检索单个元素的容器类一般会定义下标操作符,即operator[].
注解:下标操作符必须定义为类成员函数。
1 提供读写访问
定义下标操作符比较复杂的地方在于,它在用作赋值的左右操作时都应该能表现正常。下标操作符出现在左边,必须生成左值,可以指定引用作为返回类型而得到左值。只要
下标操作符返回引用,就可用做赋值的任意一方。
可以对const和非const对象使用下标也是个好主意。应用于const对象时,返回值应为const引用,因此不能用做赋值的目标。
类定义下标操作符时,一般需要定义两个版本:一个为非const成员并返回引用,另一个为const成用并返回非const引用。
2 原型下标定义
class Foo {
public:
int &operator[] (const size_t);
const int &operator[](const size_t)const;
private:
vector<int> data;
};
下标操作符
int& Foo::operator[] (const size_t index)
{
return data[index];
}
const int & Foo::operator[] (const size_t index) const
{
return data[index];
}