对对象的引用如何工作

How does a reference to an object work?

本文关键字:工作 何工作 对象 引用      更新时间:2023-10-16

例如在这样的函数中:

void Monster::Attack(Player& player)

此函数将位于 Monster 类的.cpp文件中,并使用 Player 类的标头。

新的对象播放器是否可以访问嵌入到 Player 类中的所有好东西。还有为什么不能:

void Monster::Attack(Player player)

做完了?

了解优

缺点后,您可以选择适当的功能。

void Monster::Attack(Player& player);

您可以避免复制输入参数的成本。您可以修改输入对象。根据您的要求,这可能是一件好事或一件坏事。

void Monster::Attack(Player player);

您会产生创建输入参数副本的成本。您可以修改函数中的player,但这不会更改调用函数中的对象。再一次,根据您的要求,这可能是一件好事或一件坏事。

我相信

参考文献再次成为内部指针。语法与指针的语法略有不同,但在引擎盖下会发生同样的事情。您正在对原始对象进行更改。

第二个方法声明的问题在于,它不使用指针或引用传递 player 参数,而是作为实际对象传递。这意味着按值传递,这意味着要创建副本。然后您对副本进行更改,会发生什么?原件保持不变,这可能不是您想要的。

我的建议是首先理解引用,与函数参数的上下文分开。

下面是一些示例代码:

int a = 5;
int &b = a;

现在,ab 都是同一变量的标签。此代码实际上与以下内容相同:

int b = 5;
int &a = b;

在随后使用 a 的任何地方,都可以改用b;此规则没有例外。关键点是,您可以有多个标识符来标识同一变量。

转到函数上下文。如果您有:

int a;
foo(a);

foo(int &b)
{

mainafoob都是同一变量的标签。在foob进行操作与在main中对a进行操作完全相同。它们都是相同的变量,只是名称不同。 就像威廉王子和剑桥公爵是同一个人一样。