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性质.它在编译时,以是否修改成员数据为依据,进行检查