我目前正在设计一个引用另一个对象数据的类。在这个新类中,我试图传递一个对象引用,以便新类可以查看对象的值而无需复制对象的原始数据。但是,我正在努力解决这个问题。
我目前有以下类原型:
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引用,它将允许我运行构造函数,但是我无法使用任何对象成员函数,因为编译器认为访问成员函数可能会更改原始对象引用的数据。
这样我有:
const RigidBody& _rigidBody;
使用构造函数
Force2Motion(const RigidBody& rigid_body):
_rigidBody(rigid_body)
是否可以对RigidBody类进行更改,即使我已将对象声明为const,我仍然可以使用成员函数?在中,我可以标记某些功能,以便它们表示访问它们不会更改对象中的任何数据吗?
感谢您的帮助!
编辑:在我描述问题的过程中,我意识到了我应该问的真正问题。因此,我很容易找到问题。看看这个link。它解释了如果将对象初始化为const,则无法访问该对象的任何成员函数,因为访问成员函数可能会更改定义为const的对象内的数据。因此,如果您有一个成员函数,您知道不会更改对象的数据,您需要使用const关键字标记该函数(请参阅具体的链接)。这样做将允许您将对象声明为const但仍然可以访问某些成员函数。
答案 0 :(得分:2)
是的,你可以。成员函数可以是const
void myFunction() const;
使用此const
使this
指针成为const,这意味着您无法修改成员变量或调用其他非const成员函数。这有一些例外,例如const_cast
和mutable
关键字。但那些应该可以避免。
关于何时使用此const
的简单示例是getter。
int getSize() const
{
return size;
}
由于什么都不会改变,因此可以在const或非const对象上调用此函数。