当调用在
Eigen::Map
内返回向量的函数时,映射会产生错误的结果。但是,如果首先分配向量并应用 Eigen::Map
,则可以实现预期结果。这是一个错误吗?
#include <Eigen/Eigen>
#include <iostream>
#include <vector>
std::vector<double> create_vector(double const a, double const b)
{
return {a, b, a + b, a * b};
}
int main()
{
Eigen::Map<const Eigen::Vector<double, 4>>
eigen_vector_1(create_vector(1.0, 2.0).data());
std::cout << eigen_vector_1 << std::endl;
auto const vector = create_vector(1.0, 2.0);
Eigen::Map<const Eigen::Vector<double, 4>>
eigen_vector_2(vector.data());
std::cout << eigen_vector_2 << std::endl;
return 0;
}
向量按值返回,
create_vector(1.0, 2.0).data()
使用它的指针,因此第一个会导致未定义的行为。
请注意,clang 会给出相同的警告:
<source>:12:15: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl]