当前位置:  开发笔记 > 编程语言 > 正文

类operator []不返回lhv

如何解决《类operator[]不返回lhv》经验,为你挑选了1个好方法。

考虑这个课程:

#include 
using namespace std;

template
class Vector{
private:
    size_t      size_;
    vector   items;

public:
    Vector(){ size_ = 0; }
    inline void clear(){ size_ = 0; }
    inline void push_back( const T item ){
        if( items.size() == size_ )
            items.push_back( item );
        else
            items[size_] = item;
        size_++;
    }
    inline const T& operator[](int i) const { return items[i]; }
    inline T& operator[](int i) { return items[i]; }
};

int main(int argc, char *argv[]){
    Vector vec;
    vec.push_back( true );
    if( vec[0] )
        vec[0] = false;
}

使用MSVS 2013进行编译时,非const运算符[]会出现以下错误: error C2440: 'return' : cannot convert from 'std::_Vb_reference>>' to 'bool &'

更改return语句会return (T&)(items[i]);导致警告warning C4238: nonstandard extension used : class rvalue used as lvalue

程序运行(在调试模式下),但最后一个语句不会改变vec[0](如你所期望的rhv)的值.

这有什么不对?



1> songyuanyao..:

因为std::vector是特殊的,它是一个节省空间的专业化std::vector该类型bool.并且operator[]不会返回bool&或者const bool&,而是代表对单个引用的代理类bool.

将类暴露std::vector::reference为访问单个位的方法.特别是,此类的对象operator[]由value 返回.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有