为什么这个c ++示例中的std :: set`lower_bound`是一个`const_iterator`

时间:2016-10-20 18:01:36

标签: c++ c++11 stdset

我不明白为什么不编译。

#include <string>
#include <set>

struct Foo
{
    struct Rec
    {
        std::string     _s;

        Rec(const std::string& s) : _s(s) {}
        bool operator==(const Rec& r) const { return _s == r._s; }
        bool operator<(const Rec& r) const { return _s < r._s; }
    };

    typedef std::set<Rec>  Recs;

    Recs        _recs;

    Rec* find(const std::string& s)
    {
        Recs::iterator it = _recs.lower_bound(Rec(s));
        if (it != _recs.end())
        {
            // why is `it` const_iterator??
            Rec& r = *it;  // this line doens't compile
            return &r;
        }
        return 0;
    }
};

int main()
{
    return 0;
}

visual c ++错误:

foo.cpp(25): error C2440: 'initializing': cannot convert from 'const Foo::Rec' to 'Foo::Rec &'
foo.cpp(25): note: Conversion loses qualifiers

g ++错误:

foo.cpp: In member function 'Foo::Rec* Foo::find(const string&)':
foo.cpp:25:23: error: binding 'const Foo::Rec' to reference of type 'Foo::Rec&'
discards qualifiers
             Rec& r = *it;

我想要返回一个非const Rec*而我没有做任何const AFAIK。

感谢,

看起来我的问题包含很多代码......

0 个答案:

没有答案