给出两个操作数
Eigen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
函数
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
如何执行函数调用?
我正在寻找一条简单的代码行,作为如何执行函数调用的示例;现在有点与*,&,const等混淆了。随时编辑问题标题。
提前谢谢
答案 0 :(得分:3)
tree.Insert(x)
?在函数签名中,&
字符表示它通过引用获取该参数。这很有用,因为它允许代码避免复制大值,或者因为您想要修改函数中的值。例如:
&
由于我们以void addOne(int& i) {
i += 1;
}
int main() {
int x = 10;
addOne(x); // increments x by one
std::cout << x << std::endl; // Prints 11
}
为参考,因此在函数内部修改x
时,x
的原始值也被修改了。
x
?当变量声明为const
时,这意味着您无法对其进行修改。例如:
const
如果您有一个const int x = 5;
x = 6; // ERROR: can't modify a const variable
引用,则意味着它是对该变量的引用,但是您不能通过该引用来修改变量。例如:
const
当您复制昂贵的对象时,应使用const引用作为函数参数,但您要保证将其传递给的函数不会对其进行修改。
您提供的函数通过const引用接受了int x = 4;
x++; // It's fine to modify x
const int& x_ref = x; // Get a const reference to x
x_ref++; //Can't modify x_ref: x_ref is const
,避免了复制,但向用户保证Eigen::Quaterniond
对象不会被该函数修改。
Eigen::Quaternoind
您可以像调用其他任何函数一样调用它:
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
答案 1 :(得分:1)
参考-&-就像您要给两个变量在同一根杆的另一端一样。它们看上去都不同,但实际上在下面是相同的东西。您可以像使用普通变量一样使用它:
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个参数,一个const Eigen ::四元数引用,一个tf ::四元数引用。
这两个对象都是引用,因此如我们上面所见,它们是相同对象的不同名称,在您的情况下为eigen_quat和tf_quat。
const限定符表示该函数承诺不会编辑您传入的对象的状态(编译器通过不允许其调用const对象上的任何非const成员函数来强制执行此操作。)
让我们开始做生意吧!
通过在0x499602D2's答案中进行一些复制粘贴向导:
quaternionEigenToTF( eigen_quat, tf_quat )
我们可以通过将两个对象都作为参数来轻松调用此函数。参考资料部分是由魔术完成的!