在寫下面的函數abs
,我得到的錯誤:非成員函數不能具有CV-預選賽
非成員函數unsigned int abs(const T&)
不能有CV-預選賽。
template<typename T>
inline unsigned int abs(const T& t) const
{
return t>0?t:-t;
}
刪除該函數的const
限定符後沒有錯誤。由於我不修改t
裏面的函數,上面的代碼應該已經編譯好了。我想知道爲什麼我得到了錯誤?
在寫下面的函數abs
,我得到的錯誤:非成員函數不能具有CV-預選賽
非成員函數unsigned int abs(const T&)
不能有CV-預選賽。
template<typename T>
inline unsigned int abs(const T& t) const
{
return t>0?t:-t;
}
刪除該函數的const
限定符後沒有錯誤。由於我不修改t
裏面的函數,上面的代碼應該已經編譯好了。我想知道爲什麼我得到了錯誤?
您不想修改t
的意願表示爲const T& t
。結尾const
指定您將不會修改abs
類所屬的任何成員變量。由於沒有這個函數所屬的類,所以你得到一個錯誤
函數聲明結尾處的const
修飾符適用於成員函數的隱藏this
參數。
由於這是一項免費功能,因此不存在this
,並且不需要該修飾符。
t
參數在參數列表中已有其自己的const
。
上的成員函數的CV-限定符指定的this
指針是已經進行間接尋址類型const
(或volatile
,const volatile
),並且因此該成員函數可以在與該資格實例調用。
自由函數(和類靜態函數)沒有this
指針。
衆所周知,const
關鍵字緊跟在參數列表之後,表示這是一個指針常量的指針。
有一個非成員函數,它不屬於該類,所以添加const對端錯誤發生。
用於解決該問題:是要麼成爲一個類的成員函數或刪除關鍵字const
const的相對端