类的复制赋值运算符
copy assignment operator of class
#include <iostream>
using namespace std;
class ClassA
{
const int a;
int b, c;
public:
ClassA(int x, int y):a(10)
{
b = x;
c = y;
}
ClassA():a(10)
{
}
void print()
{
cout << a << endl;
}
};
int main()
{
ClassA objA(10, 20);
ClassA objB;
objB = objA;
objB.print();
return 0;
}
在以下情况下,编译器不会创建复制赋值运算符:
- 类具有 const 类型或引用类型的非静态数据成员。
- 类具有具有不可访问的复制赋值运算符类型的非静态数据成员。 类
- 派生自具有无法访问的复制赋值运算符的基类。
在上述情况下,我通过上面的例子理解了案例 1。 但是我没有收到案例 2 和案例 3,所以请通过一些示例帮助我理解。
情况 2 是这样的:
class non_assignable {
// note: private
non_assignable &operator=(non_assignable const &source);
};
class whatever {
non_assignable n;
};
情况 3 如下所示:
class whatever : public non_assignable {};
在任一情况下,都不会为whatever
自动生成复制赋值运算符,因为它包含一个non_assignable
成员/子对象,该对象具有不可访问的(私有(复制赋值运算符。
相关文章:
- 复制构造函数、赋值运算符C++
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 使用赋值运算符复制 std::vector
- 为什么基类中的复制和交换会导致派生类中的复制赋值运算符被隐式删除?
- 复制构造函数和赋值运算符的值类实现
- 在C++中,我可以在定义自己的复制构造函数后跳过定义赋值运算符吗?
- 为什么我的类工作正常,即使在返回垃圾值作为赋值运算符和空复制构造函数的返回之后
- 在c++中重载复制赋值运算符
- 禁止复制构造函数和赋值运算符singleton类
- 复制构造函数和复制赋值运算符是否应具有相同的语句?
- 重载赋值运算符函数和复制构造函数中的错误
- 复制 CTOR 与赋值运算符以初始化对象(性能)
- 使用复制运算符作为赋值运算符
- 移动赋值运算符与复制赋值运算符
- Clang 无法在赋值运算符/复制构造函数中检测到未初始化的类成员
- 错误消息:使用复制构造函数和重载赋值运算符
- 使用赋值运算符复制两个类中的数组时出现编译器错误
- 赋值运算符复制数组中除可用空间之外的所有内容