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

如何修复C++中无法使用的拷贝构造函数简化写法?

问题原因与解决方法

问题出在Direction的拷贝构造函数参数定义上:它接受的是非const引用(Direction&),但Movement类中的d是const成员变量,所以在Movement的拷贝构造函数里,_M.d属于const Direction类型,无法绑定到非const引用的参数上,导致d(_M.d)这行代码编译失败。

要让注释掉的版本生效,只需要修改Direction的拷贝构造函数,将参数改为const Direction&,这样就能接受const对象的拷贝请求:

struct Direction {
    const double x, y, z;
    Direction(double _X, double _Y, double _Z) : x(_X), y(_Y), z(_Z) {}
    Direction(const Direction& _D) : x(_D.x), y(_D.y), z(_D.z) {} // 修改为const引用
}; // 注意结构体末尾加;,C++语法要求

class Movement {
private:
    const double v;
    const Direction d;
public:
    Movement(double _V, double _X, double _Y, double _Z) : v(_V), d(_X, _Y, _Z) {}
    Movement(double _V, Direction _D) : v(_V), d(_D) {}
    // 现在这个版本可以正常运行了
    Movement(Movement& _M) : v(_M.v), d(_M.d) {}                   
}; // 类末尾同样加;

额外说明:如果你的项目使用C++11及以上标准,其实可以完全省略手动编写Direction的拷贝构造函数——编译器会自动生成一个默认的拷贝构造函数,它的参数就是const Direction&,完全能满足你的需求,手动编写反而容易出现这类参数不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:39:13