【问题标题】:Armadillo C++ - Initialize read-only matrix from const memory without copyingArmadillo C++ - 从常量内存初始化只读矩阵而不复制
【发布时间】:2020-05-25 15:45:39
【问题描述】:

这里给出了如何围绕现有内存创建犰狳矩阵的一个很好的答案:armadillo C++: matrix initialization from array

我有一种情况,我想从一个 const 数组创建一个犰狳矩阵,而不是先复制数据。第一部分很简单:

  • mat(const aux_mem*, n_rows, n_cols)

通过从只读辅助存储器复制数据来创建矩阵。

但是,这首先复制内存,在我的情况下这是不必要的。

我想要这样的东西:

const double* ptr = start; // I cannot modify the source of this pointer

const amra::mat M(ptr, 4, 4, /*copy*/ false, /*strict*/ true); 

然而,这个确切的构造函数并不存在。有没有我想念的替代方法?

【问题讨论】:

    标签: c++ arrays pointers constants armadillo


    【解决方案1】:

    使用const_cast 从指针中删除const 限定符。

    在你的情况下,这是const arma::mat M(const_cast<double*>(ptr), 4, 4, false, true);

    【讨论】:

    • 我不知道可以将 const 指针转换回非常量指针。我认为 const 指针是一种可靠的保护,但我想它仍然需要开发人员尊重它。
    • 虽然这是正确的答案,但通常认为丢弃 const 是不好的做法 (github.com/isocpp/CppCoreGuidelines/blob/master/…)。您至少应该使您以这种方式创建的 arma::mat 也为 const 以避免允许它修改不应修改的内存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多