You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码执行时move构造函数未被调用原因咨询

输出原因解释

第一行param called的原因

你调用mystring s1 = move("Hello World");时,"Hello World"本身是const char*类型的字符串字面值,std::move仅会将它转换为const char*类型的右值,不会自动生成mystring类型的对象。
你的移动构造函数要求的入参是mystring&&类型,和const char*完全不匹配,因此编译器会优先匹配可以接收const char*入参的构造函数,也就是你写的mystring(const char * obj),因此输出param called。

第二行copy called的原因

执行mystring s2 = s1;时,s1是已经构造完成的mystring类型左值,而移动构造函数的入参是mystring&&右值引用,左值无法直接绑定到右值引用,因此编译器会匹配入参为mystring&的拷贝构造函数,输出copy called。

补充说明

如果希望触发移动构造,需要先构造出mystring类型的临时对象再调用std::move,示例写法:

mystring s1 = std::move(mystring("Hello World"));

此时右侧是mystring类型的右值,会匹配移动构造函数输出shallow copy created。
另外建议你将拷贝构造函数的入参改为const mystring& obj,否则无法对const修饰的mystring对象执行拷贝操作,不符合C++类的常规实现规范。

内容的提问来源于stack exchange,提问作者hacker_panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:09:01