c++重载操作符中如何调用默认操作符

GKatHere 2020-05-07 05:23:17
如题:
c++重载操作符中如何调用默认操作符。
例:

struct AA {
int a, b, c;
AA& operator=(const AA& r) {
*this = r; // 此处想调用默认=
c++;
return *this;
}
};
...全文
619 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingddangcfl 2020-06-07
  • 打赏
  • 举报
回复
重载这个还挺麻烦的
GKatHere 2020-05-13
  • 打赏
  • 举报
回复
memcopy只能用于平凡copy,如果内有一个std::string就死死定了
千梦一生 2020-05-11
  • 打赏
  • 举报
回复
换而言之,使用memcpy(this, &r, sizeof(AA));就相当于调用了原生的=。
如此页不能解决问题的话,将operator=重命名为其它的,结果也同样不能解决问题。
千梦一生 2020-05-11
  • 打赏
  • 举报
回复
3楼的老哥说了,默认的 = 就是这样memcpy(this, &r, sizeof(AA));按位复制的。

如果不满足需求的话,这里调用默认等号也没有用。
-------------------------------------------------------------------------------------
如果是因为对象中有对象的指针、或者引用这样的成员变量,比如【A* pa】。
那么需要单独复制一下pa,【可以同样重载=,但不如之直接memcpy】。接着如果pa对象里还是对象的指针、引用这样的成员变量、还得继续....就很多很多了。

其实工作量是一定的。

GKatHere 2020-05-11
  • 打赏
  • 举报
回复
算了,我还是将自定义的 operator=重命名为其它吧
真相重于对错 2020-05-10
  • 打赏
  • 举报
回复
除了你,没人在钻牛角尖
dingddangcfl 2020-05-10
  • 打赏
  • 举报
回复
算了 不钻牛角尖了
千梦一生 2020-05-10
  • 打赏
  • 举报
回复
引用 20 楼 dingddangcfl 的回复:
[quote=引用 19 楼 真相重于对错 的回复:]
=是操作符不是函数,哪有什么原生不原生。。。。。

兄台 你没看明白吧 LZ重载了=[/quote]
这里的回复是在说 = 这个东西,算不算属于全局空间的问题。属于在理论上就可以显示调用::=。但结论是不属于。没得关系
真相重于对错 2020-05-09
  • 打赏
  • 举报
回复
=是操作符不是函数,哪有什么原生不原生。。。。。
真相重于对错 2020-05-09
  • 打赏
  • 举报
回复
如果你认为,我哪里说错,尽管指出
真相重于对错 2020-05-09
  • 打赏
  • 举报
回复
引用 22 楼 dingddangcfl 的回复:
[quote=引用 21 楼 真相重于对错 的回复:] [quote=引用 20 楼 dingddangcfl的回复:][quote=引用 19 楼 真相重于对错 的回复:] =是操作符不是函数,哪有什么原生不原生。。。。。
兄台 你没看明白吧 LZ重载了=[/quote] 请看清题目![/quote] c++重载操作符中如何调用默认操作符 ======================== c++重载操作符 operator= ; 默认操作符 =;LZ 的代码存在循环调用的问题,想调用默认的= ,有什么问题?[/quote] 你不是说我没看明白吗,那么不要问我这个不明白的。
dingddangcfl 2020-05-09
  • 打赏
  • 举报
回复
引用 21 楼 真相重于对错 的回复:
[quote=引用 20 楼 dingddangcfl的回复:][quote=引用 19 楼 真相重于对错 的回复:]
=是操作符不是函数,哪有什么原生不原生。。。。。

兄台 你没看明白吧 LZ重载了=[/quote]
请看清题目![/quote]

c++重载操作符中如何调用默认操作符
========================
c++重载操作符 operator= ; 默认操作符 =;LZ 的代码存在循环调用的问题,想调用默认的= ,有什么问题?
真相重于对错 2020-05-09
  • 打赏
  • 举报
回复
引用 20 楼 dingddangcfl的回复:
[quote=引用 19 楼 真相重于对错 的回复:]
=是操作符不是函数,哪有什么原生不原生。。。。。

兄台 你没看明白吧 LZ重载了=[/quote] 请看清题目!
dingddangcfl 2020-05-09
  • 打赏
  • 举报
回复
引用 19 楼 真相重于对错 的回复:
=是操作符不是函数,哪有什么原生不原生。。。。。

兄台 你没看明白吧 LZ重载了=
GKatHere 2020-05-08
  • 打赏
  • 举报
回复
谁在电脑前,试试::operator=(AA&, const AA&)
千梦一生 2020-05-08
  • 打赏
  • 举报
回复
引用 12 楼 真相重于对错 的回复:
从道理上讲,这样语句是不对,因为那样会引起递归。
用::方式也不对,因为原生的operator不属于全局。。。。

原来如此,又长见识了
  • 打赏
  • 举报
回复
引用 12 楼 真相重于对错 的回复:
从道理上讲,这样语句是不对,因为那样会引起递归。
用::方式也不对,因为原生的operator不属于全局。。。。


确认了,我错了,我昨天竟然撤销的时候把外面的赋值给漏掉了。。。。天啊。。。。。原谅我吧。。。
真相重于对错 2020-05-08
  • 打赏
  • 举报
回复
所以,要在自身的operator=执行原生的=,只有memcpy.
真相重于对错 2020-05-08
  • 打赏
  • 举报
回复
从道理上讲,这样语句是不对,因为那样会引起递归。 用::方式也不对,因为原生的operator不属于全局。。。。
真相重于对错 2020-05-08
  • 打赏
  • 举报
回复
我就是win10, 你是不是没执行那个operator= 啊,如果没有执行语句,编译不报错。。。
引用 10 楼 zjq9931 的回复:
[quote=引用 9 楼 真相重于对错 的回复:] [quote=引用 6 楼 zjq9931 的回复:] vs2019用下面这个就可以 *this =(r);
我大概用的是假的vs2019[/quote] 我在win7上用了一下VS2019也有这个问题,在win10上没有这个问题,但win10是英文版,VS也是英文版,上还装了win10的WDK,Win7是中文版,VS也是中文版,不确定跟这个有没有关系。一会儿代码贴上来。[/quote]
加载更多回复(11)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧