[英]Difference between a const and non-const function in C++
我一直在閱讀一本C ++書籍並發現了這兩個函數:
int &Array::operator []( int subscript ) // first
{
//code
return ptr[ subscript ];
}
int Array::operator[]( int subscript ) const //second
{
//code
return ptr[ subscript ]; // value return
}
我們的想法是創建一個Array對象並訪問一些私有成員,例如:
Array myArray;
cout << myArray[ 2 ];
但是我沒有區分這些函數,主要是因為每當我輸入類似“cout << myArray [2]”的東西時,第一個函數被調用。 那么,第二個函數何時被調用? 第二個功能是否有效?
由於您聲明了一個可變的Array
實例,因此使用了第一個函數。
您需要一個const
實例才能使用第二個實例:
const Array myArray;
// As this is const, only the second function can work
cout << myArray[2];
如果你仔細閱讀了函數簽名,那么第二個函數簽名就是const
,這意味着它適用於const
實例。 通常,如果沒有定義非const
版本,那么這將是一個將運行的版本,但是當你已經不再使用另一個版本時,那就是那個被調用的版本。
第一個函數允許變異,因為它返回一個引用而不是一個副本:
myArray[2] = 5;
它實際上改變了數組的位置。 const
版本不允許這樣做,而是獲得臨時值。
非靜態函數后面的const限定函數中的this指針。 因此,在此函數中出現的成員變量無法修改。 const限定的成員函數提供了有關它的更多細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.