我得到了一個賦值來實現模板數組類。 其中一個要求是重載[]運算符。 我做了這兩個常量和非const版本似乎工作正常。數組運算符[]重載const和非const版本
const T& operator[](const unsigned int index)const
和
T& operator[](const unsigned int index)
我的問題是如何將編譯器知道跑 哪一個的時候我會做這樣的事情:
int i=arr[1]
在非const的陣列?
我得到了一個賦值來實現模板數組類。 其中一個要求是重載[]運算符。 我做了這兩個常量和非const版本似乎工作正常。數組運算符[]重載const和非const版本
const T& operator[](const unsigned int index)const
和
T& operator[](const unsigned int index)
我的問題是如何將編譯器知道跑 哪一個的時候我會做這樣的事情:
int i=arr[1]
在非const的陣列?
非const函數將始終在非常量數組上調用,const函數在常量數組上調用。
如果有兩個名稱相同的方法,編譯器會根據參數的類型和隱式對象參數(arr)的類型選擇最合適的方法。
我剛纔已經回答了類似的問題有一天,你會發現它有用:https://stackoverflow.com/a/16922652/2387403
非常感謝你的幫助。 – petric
這一切都取決於你的對象的聲明。如果你有
const T arr[];
...
int i=arr[1];
然後const版本將被調用,但是如果你有
T arr[];
...
int i=arr[1];
則非const版本將被調用。所以在你給出的例子中,因爲它是一個非const數組,所以非const版本將被調用。
它會調用'const'對象的'const'版本,否則非'const'版本。 –
我不太明白你的意思,你可以詳細說明一下嗎? – petric
如果'arr'是const,則會調用const版本。 –