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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值