如何执行此函数调用
How to perform this function call
给定两个操作数
Eigen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
和函数
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
你是如何进行函数调用的?
我正在寻找一行简单的代码,作为如何执行函数调用的示例;现在有点混淆 *、&、const 等。请随意编辑问题标题。
提前致谢
什么是&
?
在函数签名中,&
字符表示它通过引用获取该参数。这很有用,因为它允许代码避免复制大值,或者因为您想修改函数中的值。例如:
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);
引用 - & - 就好像你在同一根棍子的不同端给两个变量一样。它们看起来不同,但实际上在下面是相同的东西。您可以像使用普通变量一样使用它:
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::Quaterniond 引用,和一个 tf::Quaternion 引用。
这两个对象都是引用,因此正如我们在上面看到的,它们是相同对象的不同名称,在您的例子中是 eigen_quat 和 tf_quat。
const 限定符意味着该函数承诺不会编辑您传入的对象的状态(编译器通过不允许它调用 const 对象上的任何 non-const 成员函数来强制执行此操作)。
那么让我们进入正题吧!
通过 0x499602D2's 的一些 copy-paste 魔法来回答:
quaternionEigenToTF( eigen_quat, tf_quat )
我们可以通过将两个对象作为参数传递来轻松调用此函数。 reference-taking 部分神奇地发生了!
给定两个操作数
Eigen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
和函数
void tf::quaternionEigenToTF (const Eigen::Quaterniond &e, tf::Quaternion &t)
你是如何进行函数调用的?
我正在寻找一行简单的代码,作为如何执行函数调用的示例;现在有点混淆 *、&、const 等。请随意编辑问题标题。
提前致谢
什么是&
?
在函数签名中,&
字符表示它通过引用获取该参数。这很有用,因为它允许代码避免复制大值,或者因为您想修改函数中的值。例如:
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);
引用 - & - 就好像你在同一根棍子的不同端给两个变量一样。它们看起来不同,但实际上在下面是相同的东西。您可以像使用普通变量一样使用它:
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::Quaterniond 引用,和一个 tf::Quaternion 引用。
这两个对象都是引用,因此正如我们在上面看到的,它们是相同对象的不同名称,在您的例子中是 eigen_quat 和 tf_quat。
const 限定符意味着该函数承诺不会编辑您传入的对象的状态(编译器通过不允许它调用 const 对象上的任何 non-const 成员函数来强制执行此操作)。
那么让我们进入正题吧!
通过 0x499602D2's 的一些 copy-paste 魔法来回答:
quaternionEigenToTF( eigen_quat, tf_quat )
我们可以通过将两个对象作为参数传递来轻松调用此函数。 reference-taking 部分神奇地发生了!