雖然人們廣泛接受盡可能在返回類型中使用const,但問題是為什麼const int 運算子[ ]( const int index) const 優於int 運算子[](const int index) const。為了深入研究這一點,我們首先探討返回類型中 const 的微妙之處。
如「Effective C」第 03 條所提到的,非類別回傳類型上的頂層 const 限定詞確實會被忽略。儘管編寫了 int const foo();,但返回類型仍然是 int。但是,引用返回類型的情況並非如此。 int&operator[](int index);的區別和 int const& 運算子[](int index) const;至關重要。
返回類別類型時,const 限定符扮演重要角色。如果傳回 T const,則呼叫者將被限制在傳回的物件上呼叫非常量成員函數。考慮以下範例:
<code class="cpp">class Test { public: void f(); void g() const; }; Test ff(); Test const gg(); ff().f(); // legal ff().g(); // legal gg().f(); // **illegal** gg().g(); // legal</code>
在這種情況下,附加到gg() 的const 限定符限制呼叫者存取非const 成員函數,例如f(),確保傳回物件的完整性
因此,當傳回const 物件時,傳回類型上的const 限定符的用途超出了非參考回傳類型的簡單情況。它確保呼叫者以一致的方式與傳回的物件交互,根據類別設計的意圖保留其內部狀態。
以上是為什麼回傳物件時 `const int operator[](const int index) const` 優於 `int operator[](const int index) const`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!