如何执行此功能调用

时间:2019-06-20 23:03:30

标签: c++ pointers reference function-call

给出两个操作数

Eigen::Quaterniond eigen_quat;  
tf::Quaternion tf_quat;

函数

void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)

如何执行函数调用?

我正在寻找一条简单的代码行,作为如何执行函数调用的示例;现在有点与*,&,const等混淆了。随时编辑问题标题。

提前谢谢

2 个答案:

答案 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 ref作为函数参数?

当您复制昂贵的对象时,应使用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 )

我们可以通过将两个对象都作为参数来轻松调用此函数。参考资料部分是由魔术完成的!