gpt4 book ai didi

C++ 将 Const 对象引用传递给构造函数

转载 作者:行者123 更新时间:2023-11-30 03:47:22 25 4
gpt4 key购买 nike

我目前正在设计一个将引用另一个对象的数据的类。在这个新类中,我试图传递一个对象引用,这样新类就可以查看对象的值,而不必复制对象的原始数据。但是,我正在为此苦苦挣扎。

我目前有以下类原型(prototype):

Force2Motion(const RigidBody& rigid_body);

因此,当我将此引用传递给构造函数时,我想保存它以供将来在对象初始化后使用。因此我想用某种方式来表达

RigidBody _memberObject = rigid_body;

但是,我想避免将所有 rigid_body 复制到它自己的对象中。相反,我在想做这样的事情会更合适

// Force2Motion Member Object
RigidBody& _rigidBody;

然后在对象创建期间有以下构造函数

Force2Motion(const RigidBody& rigid_body):
_rigidBody(rigid_body)

但是,这会抛出一个错误,提示我不允许将引用分配给 const 引用。我想确保这个新类不会重新分配构造函数引用,因此我相信我需要常量。

我确实意识到,如果我将成员对象初始化为 const 引用,它将允许我很好地运行构造函数,但是我无法使用任何对象成员函数,因为编译器认为访问成员函数可能会更改原始对象引用的数据。

我有:

const RigidBody& _rigidBody;

构造函数

 Force2Motion(const RigidBody& rigid_body):
_rigidBody(rigid_body)

是否可以对 RigidBody 类进行更改,以便即使我已将对象声明为 const,我仍然可以使用成员函数?比如,我可以标记某些函数,使它们表明访问它们不会更改对象内的任何数据吗?

感谢您的帮助!

编辑:在我描述问题的过程中,我意识到我应该问的真正问题。因此,我很容易就能找到问题。看看这个 link .它解释说,如果将对象初始化为 const,则将无法访问该对象的任何成员函数,因为访问成员函数可能会更改定义为 const 的对象内的数据。因此,如果您有一个您知道不会更改对象数据的成员函数,则需要使用 const 关键字标记该函数(有关详细信息,请参阅链接)。这样做将允许您将对象声明为 const,但仍然可以访问某些成员函数。

最佳答案

是的,你可以。成员函数可以设为常量

void myFunction() const;

使用 this const 使 this 指针为 const,这意味着您不能修改成员变量或调用其他非 const 成员函数。这有一些异常(exception),比如 const_castmutable 关键字。但这些应该避免。

关于何时使用此 const 的一个很好、简单的示例是关于 getter。

int getSize() const
{
return size;
}

因为什么都不会改变,所以可以在 const 或非 const 对象上调用此函数。

关于C++ 将 Const 对象引用传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com