簡體   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