本征图的奇怪行为

问题描述 投票:0回答:1

当调用在

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;
}
c++ eigen
1个回答
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]
   
© www.soinside.com 2019 - 2024. All rights reserved.