将C++数组深拷贝至Eigen矩阵:const映射是否仍有效?
问题解答
修改后的代码可以实现有效的深拷贝,原因如下:
Eigen::Map<const Eigen::MatrixXf>是一个只读的内存视图,它不会分配新内存,只是将const float*类型的input.data映射为Eigen矩阵的接口,完美适配const Input&的输入要求,解决了最初的类型转换编译错误。- 当执行
Eigen::MatrixXf data = 映射对象时,MatrixXf会自动分配独立的内存空间,然后将映射视图指向的原数组数据完整复制到自己的内存中。这一步是标准的深拷贝操作:- 后续修改
data的内容不会影响原input.data数组 input的const属性被严格遵守,映射视图不会对原数组做任何修改
- 后续修改
你可以通过以下逻辑验证深拷贝效果:
// 修改data的元素 data(0,0) = 100.0f; // 原input.data[0]的值不会改变,证明是深拷贝 assert(input.data[0] != 100.0f);
内容的提问来源于stack exchange,提问作者WilliamAllwaysWin
相关产品推荐
相关产品推荐

