gpt4 book ai didi

c++ - Derived 到 MatrixBase 转换背后的故事

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:06 27 4
gpt4 key购买 nike

当您将矩阵对象作为 MatrixBase 引用传递给函数时会发生什么?我不明白幕后到底发生了什么。

示例函数代码如下:

#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;
}

它给出了以下输出:

size (rows, cols): 4 (2, 2)
1
16

16 比 1 的差异从何而来?

还有为什么需要转换?

提前致谢!

最佳答案

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

m ,另一方面,类型为 Matrix<float, 2, 2> ,显然在您的平台上大小为 16。

我创建了一个 live example演示 sizeof 的这种行为.

关于c++ - Derived 到 MatrixBase<Derived> 转换背后的故事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com