如何执行此函数调用
Posted
技术标签:
【中文标题】如何执行此函数调用【英文标题】:How to perform this function call 【发布时间】:2019-06-20 23:03:30 【问题描述】:给定两个操作数
Eigen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
还有功能
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
你如何执行函数调用?
我正在寻找一个简单的代码行,作为如何执行函数调用的示例;现在有点困惑 *,&, const 等。随意编辑问题标题。
提前谢谢你
【问题讨论】:
应该像quaternionEigenToTF( eigen_quat, tf_quat )
一样简单
【参考方案1】:
&
是什么?
在函数签名中,&
字符表示它通过引用获取该参数。这很有用,因为它允许代码避免复制大值,或者因为您想修改函数中的值。例如:
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
引用,则表示它是对变量的引用,但您不能通过该引用修改变量。例如:
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
为什么使用 const ref 作为函数参数?
当您有一个复制成本很高的对象时,您应该使用 const 引用作为函数参数,但您想保证它不会被您传递给它的函数修改。
您提供的函数通过 const 引用获取 Eigen::Quaterniond
,避免复制,但向用户保证 Eigen::Quaternoind
对象不会被函数修改。
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
我怎么称呼它?
您可以像调用任何其他函数一样调用它:
igen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
// Call the function
tf::quaternionEigenToTF (eigen_quat, tf_quat);
【讨论】:
关于引用的更多信息:C++ 引用不是变量。它是现有变量的另一个名称,因此与传递包含另一个变量地址的变量的指针不同,引用是另一个变量。 感谢您的精彩和极其简单的解释【参考方案2】:一个参考 - & - 就好像你给两个变量一个相同的棒的不同端。它们看起来不同,但实际上是相同的东西。您可以像使用普通变量一样使用它:
int var10;
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::Quaterniond 引用和一个 tf::Quaternion 引用。
这两个对象都是引用,所以正如我们在上面看到的,它们是相同对象的不同名称,在你的例子中是 eigen_quat 和 tf_quat。
const 限定符意味着函数承诺不会编辑您传入的对象的状态(编译器通过不允许它调用 const 对象上的任何非 const 成员函数来强制执行此操作)。
让我们开始吧!
通过从0x499602D2's 做一些复制粘贴魔法回答:
quaternionEigenToTF( eigen_quat, tf_quat )
我们可以通过将两个对象作为参数传递来轻松调用此函数。引用部分是魔法发生的!
【讨论】:
以上是关于如何执行此函数调用的主要内容,如果未能解决你的问题,请参考以下文章