如果将矩阵对象作为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
1616比1的差异从何而来?
还有为什么要进行转换呢?
提前感谢!
发布于 2018-01-24 14:11:09
sizeof是在编译时计算的,因此它与声明的(静态)对象类型有关。b的类型是MatrixBase<Derived> (忽略引用,就像sizeof那样),它很可能是一个空基类,因此它的大小为1。
另一方面,m是Matrix<float, 2, 2>类型的,显然您的平台上的尺寸是16。
我创建了一个实例化来演示sizeof的这种行为。
发布于 2018-01-24 14:09:57
sizeof工作在编译时类型上。请参阅大面积
当应用于表达式时,size of不计算表达式,而且即使表达式指定多态对象,结果也是表达式的静态类型的大小。
这意味着您可以得到MatrixBase<Derived>的大小,而不管实例是什么类型。
表达式sizeof(b)与编写sizeof(MatrixBase<Derived>)完全相同。
https://stackoverflow.com/questions/48424257
复制相似问题