Ответ 1
Ключевое слово auto
сообщает компилятору "угадать" лучший объект, основанный на правой части =
. Вы можете проверить результаты, добавив
std::cout << typeid(resAuto).name() <<std::endl;
std::cout << typeid(resVector3).name() <<std::endl;
до foo
(не забудьте включить <typeinfo>
).
В этом случае, после создания временного Vector3
, вызывается метод operator+
, который создает объект CwiseBinaryOp
. Этот объект является частью Eigens ленивой оценки (может увеличить производительность). Если вы хотите принудительно произвести оценку (и, следовательно, определение типа), вы можете использовать
const auto resAuto = (Ha + Vector3(0.,0.,j * 2.567)).eval();
вместо вашей строки в foo
.
Несколько примечаний:
-
Vector3
идентичен классуVector3d
, определенному в Eigen - Вы можете использовать
#include <Eigen/Core>
вместо#include <Eigen/Geometry>
, чтобы включить большинство заголовков Eigen, а также определить определенные вещи там, которые должны быть.