首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生到MatrixBase<Derived>转换的故事

派生到MatrixBase<Derived>转换的故事
EN

Stack Overflow用户
提问于 2018-01-24 13:58:31
回答 2查看 166关注 0票数 4

如果将矩阵对象作为MatrixBase引用传递到函数中,会发生什么情况?我不明白幕后到底发生了什么。

一个示例函数代码是:

代码语言:javascript
复制
#include <Eigen/Core>
#include <iostream>

using namspace Eigen;

template <typename Derived>
void print_size(const MatrixBase<Derived>& b)
{
  std::cout << "size (rows, cols): " << b.size() << " (" << b.rows()
            << ", " << b.cols() << ")" << std::endl;
  std::cout << sizeof(b) << std::endl;
}

int main() {
    Matrix<float, 2, 2> m;
    m << 0.0, 0.1,
         0.2, 0.3;

    print_size(m);
    std::cout << sizeof(m) << std::endl;
}

它提供了以下输出:

代码语言:javascript
复制
size (rows, cols): 4 (2, 2)
1
16

16比1的差异从何而来?

还有为什么要进行转换呢?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-24 14:11:09

sizeof是在编译时计算的,因此它与声明的(静态)对象类型有关。b的类型是MatrixBase<Derived> (忽略引用,就像sizeof那样),它很可能是一个空基类,因此它的大小为1。

另一方面,mMatrix<float, 2, 2>类型的,显然您的平台上的尺寸是16。

我创建了一个实例化来演示sizeof的这种行为。

票数 7
EN

Stack Overflow用户

发布于 2018-01-24 14:09:57

sizeof工作在编译时类型上。请参阅大面积

当应用于表达式时,size of不计算表达式,而且即使表达式指定多态对象,结果也是表达式的静态类型的大小。

这意味着您可以得到MatrixBase<Derived>的大小,而不管实例是什么类型。

表达式sizeof(b)与编写sizeof(MatrixBase<Derived>)完全相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48424257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档