簡體   English   中英

非成員函數不能有 cv 限定符

[英]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 (或volatileconst volatile ),因此可以在具有該限定的實例上調用成員函數。

自由函數(和類靜態函數)沒有this指針。

眾所周知,參數列表后面緊跟的const關鍵字表示這是一個指向指針常量的指針。

有一個非成員函數,它不屬於類,所以添加const相反端會出現錯誤。

問題解決方法:要么變成類成員函數要么去掉const關鍵字const對端

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM