六一的部落格


关关难过关关过,前路漫漫亦灿灿。



必须重载为成员函数


接受同类型对象的三种赋值运算符重载

  1. 拷贝赋值运算符: 引用传递, 接受一个左值
  2. 移动赋值运算符: 引用传递, 接受一个右值
  3. 拷贝并移动赋值运算符: 值传递

接受花括号列表的赋值运算符

列表初始化

1T &operator=(initializer_list<Elem> il)
2{
3    // process
4    return *this;
5}

举例

vector支持使用花括号列表进行赋值

1vector<string> v;
2v = {"a", "an", "the"};

示例

1StrVec &StrVec::operator=(initializer_list<string> il)
2{
3    auto data = alloc_n_copy(il.begin(), il.end());
4    free();
5    elements = data.first;
6    first_free = cap = data.second;
7    return *this;
8}

运算符重载: 赋值运算符


必须重载为成员函数


接受同类型对象的三种赋值运算符重载

  1. 拷贝赋值运算符: 引用传递, 接受一个左值
  2. 移动赋值运算符: 引用传递, 接受一个右值
  3. 拷贝并移动赋值运算符: 值传递

接受花括号列表的赋值运算符

列表初始化

1T &operator=(initializer_list<Elem> il)
2{
3    // process
4    return *this;
5}

举例

vector支持使用花括号列表进行赋值

1vector<string> v;
2v = {"a", "an", "the"};

示例

1StrVec &StrVec::operator=(initializer_list<string> il)
2{
3    auto data = alloc_n_copy(il.begin(), il.end());
4    free();
5    elements = data.first;
6    first_free = cap = data.second;
7    return *this;
8}