繁体   English   中英

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

[英]C++ Passing Const Object Reference Into Constructor

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

我目前有以下课程原型:

Force2Motion(const RigidBody& rigid_body);

因此,当我将此引用传递给构造函数时,我想保存该对象以备将来使用。 因此,我想说些什么

RigidBody _memberObject = rigid_body;

但是,我要避免将所有的initial_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仍可以使用成员函数? 像这样,是否可以标记某些函数以使其指示访问它们不会更改对象中的任何数据?

谢谢你的帮助!

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

是的你可以。 成员函数可以设为const

void myFunction() const;

使用this const使this指针成为const,因此,您不能修改成员变量或调用其他非const成员函数。 对此有一些例外,例如const_castmutable关键字。 但是这些应该避免。

何时使用此const一个很好的简单示例是在getter上。

int getSize() const
{
   return size;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM