c++ STL 包含器存储重载运算符 = 的类
c++ STL containor stores a class that overloads operator =
source
#include <iostream>
#include <vector>
#include <string>
class A
{
public:
std::string name;
int value;
A& operator = (const A& from) { value=from.value; return *this; }
A(std::string a_name, int a_val) { name=a_name; value=a_val; }
};
int main()
{
std::vector<A> va;
va.push_back(A("first",1));
va.push_back(A("second",2));
std::vector<A> vb;
vb.push_back(A("third",3));
vb.push_back(A("fourth",4));
va = vb; //point T
return 0;
}
在点 T 处,std::vector::operator= 调用每个存储成员的重载运算符 A::operator=
结果不是我想要的。
我的预期结果是:
在 T 点之后,VA 的成员与 VB 完全相同,如
va[0].name 是 "Third",va[1].value 是 "four"。
但结果只是复制值(因为 A::运算符 = 只复制 A::值(
在我的项目中,A::operator= 无法更改,因为它已经使用了许多其他代码.
但是我也想使用std::container::operator=。不使用指定的复制函数.
哪种方法可以做到这一点?
您有责任以这样的方式实现赋值运算符:在赋值a = b;
后,对象a
具有与对象b
相同的语义。
如果你真的做不到这一点,那么也许你可以依赖隐式定义的复制构造函数:
std::vector<A>(vb).swap(va);
// ^^^^^^^^^^^^^
// copy of vb
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 如何迭代重载运算符 [] 的类?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 重载 + 自己的类和 std::string 的运算符
- 使用 scope 运算符 (::) 引用另一个文件中的类
- 如何为我的类实现/重载二进制运算符
- 重载模板运算符调用单独的类运算符
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 清除具有已删除赋值运算符的成员的类实例
- 重载模板化类的[]运算符的常量版本
- C++ 包含特征矩阵的类的高效算术运算符重载
- 类模板中文本运算符的友元声明
- 删除了所有自动生成的构造函数/运算符的类仍然可以从函数返回吗
- 不带运算符==的类相等性检查
- 如何在map中放置具有"deleted"复制ctor和赋值运算符的类?
- "Essential C++" : 提供 iostream 运算符的类实例
- 带有赋值运算符的类的C++深度复制
- static_cast<> 使用返回常量引用的隐式转换运算符的类的行为
- c++ STL 包含器存储重载运算符 = 的类