Ссылка - & - это как если бы вы давали две переменные разным концам одной и той же палки. Они оба выглядят по-разному, но на самом деле под ними одно и то же. Вы используете его, как обычную переменную:
int var{10};
int & same_var = var; // Reference to var
std::cout << same_var << std::endl; // Prints 10
same_var += 10; // Both same_var and var get modified,
// as they're both sharing the same state
std::cout << same_var << std::endl; // Prints 20
Указатель - * - Этот плохой парень - новый блок памяти, в котором содержится адрес того, на что он указывает. Вы можете получить ссылку (&) на объект, на который он указывает, разыменовав его:
int var {1};
int * ptr = &var; // Take the address of var, store it in a pointer
std::cout << *ptr << std::endl; // Dereference the pointer - prints '1'
Теперь, когда вы можете увидеть, как мы создаем указатели и ссылки, вы можете посмотреть на вызов этой функции.
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
Эта функция принимает 2 параметра, одну константную ссылку Eigen :: Quaterniond и одну ссылку tf :: Quaternion.
Оба эти объекта являются ссылками, поэтому, как мы видели выше, они представляют собой разные имена для одних и тех же объектов, eigen_quat и tf_quat в вашем случае.
Спецификатор const означает, что функция обещает не редактировать состояние передаваемого вами объекта (компилятор обеспечивает это, не позволяя ему вызывать какие-либо неконстантные функции-члены для объекта const).
Итак, давайте приступим к делу!
Путем небольшого количества волшебного копирования-вставки из 1019 * ответа 0x499602D2:
quaternionEigenToTF( eigen_quat, tf_quat )
мы можем легко вызвать эту функцию, передав оба объекта в качестве параметров. Референтное участие происходит по волшебству!