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

时间:2015-11-14 04:54:25

标签: c++ constructor

我目前正在设计一个引用另一个对象数据的类。在这个新类中,我试图传递一个对象引用,以便新类可以查看对象的值而无需复制对象的原始数据。但是,我正在努力解决这个问题。

我目前有以下类原型:

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但仍然可以访问某些成员函数。

1 个答案:

答案 0 :(得分:2)

是的,你可以。成员函数可以是const

void myFunction() const;

使用此const使this指针成为const,这意味着您无法修改成员变量或调用其他非const成员函数。这有一些例外,例如const_castmutable关键字。但那些应该可以避免。

关于何时使用此const的简单示例是getter。

int getSize() const
{
   return size;
}

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