dicards qualifiers

stl_vector.h:43: error: passing ‘const vector<int, __default_alloc_template<false, 0> >’ as ‘this’ argument of ‘T* vector<T, Alloc>::begin() [with T = int, Alloc = __default_alloc_template<false, 0>]’ discards qualifiers


這個是我看了侯大師的STL源碼剖析後,自己模仿實現vector時出現的錯誤

相關的代碼

iterator begin(){return start;}

iterator end(){return finish;}

size_type size()const

{

return size_type(end() - begin());

}

產生discards qualifiers類錯誤可能原因如下

Usual Causes
1. A non-const member function is being invoked for a const object
2. A const object is being passed as a non-const parameter
3. A const member function calls a non-const member function

在這是我是用一個 const修飾的size調用了非const方法 begin() 和end() 雖然我在size()中並沒有修改什麼內容,但編譯是不通過的,從編譯的角度就杜絕你可能通過調用非const方法來間接 修改。

其實侯大師的書裏,爲了簡介把源碼去掉了很多內容 我就傻了吧唧的敲上去了。。。

去看了一下庫裏的


庫裏有相應的const版的begin 和end 供const方法調用的



(借用幾點別人的總結):

關於Const函數的幾點規則:

  const對象只能訪問const成員函數,而非const對象可以訪問任意的成員函數,包括const成員函數.
  const對象的成員是不可修改的,然而const對象通過指針維護的對象卻是可以修改的.
  const成員函數不可以修改對象的數據,不管對象是否具有const性質.它在編譯時,以是否修改成員數據爲依
據,進行檢查





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章