[英]non-member function cannot have cv-qualifier
在編寫以下函數abs
,出現錯誤:
非成員函數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
和 that 修飾符。
t
參數在參數列表中已經有了它自己的const
。
成員函數上的 cv 限定符指定this
指針具有間接類型const
(或volatile
、 const volatile
),因此可以在具有該限定的實例上調用成員函數。
自由函數(和類靜態函數)沒有this
指針。
眾所周知,參數列表后面緊跟的const
關鍵字表示這是一個指向指針常量的指針。
有一個非成員函數,它不屬於類,所以添加const相反端會出現錯誤。
問題解決方法:要么變成類成員函數要么去掉const
關鍵字const對端
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.