为什么const_iterator中没有编译器实现

时间:2009-11-26 03:30:06

标签: c++ stl

请考虑以下代码:

#include <vector>
#include <iostream>

class a {
public:
    int i;
    void fun() { i = 999; }
    void fun() const { std::cout << "const fun" << std::endl; }
};

const a* ha() {
    return new a();
}

int main()
{
    std::vector<a *> v;
    v.push_back(new a());

    // cannot convert from 'const a *' to 'a *'
    // a* test = ha();

    std::vector<a *>::const_iterator iterator = v.begin();
    for (; iterator != v.end(); ++iterator) {
        // No enforcement from compiler? I do not want user to modify the content through
        // const_iterator.
        a* aa = (*iterator);
        aa->fun();
    }

    std::cout << (*(v.begin()))->i << std::endl;
    getchar();
}

我可以知道为什么我没有从

中收到编译器错误
a* aa = (*iterator);

我希望编译器告诉我需要以下列方式使用const_iterator:

const a* aa = (*iterator);

或者,这是我对const_iterator的错误期望?

1 个答案:

答案 0 :(得分:1)

const_iterator表示您无法修改容器中的元素;也就是说,如果你有一个指针容器,你就不能改变指针

您没有更改指针,您正在通过指针更改指向的对象。

如果您尝试在容器中为该元素分配新指针,则无法编译:

*iterator = new a; // < Won't compile