当vector作为reference-to-const传递时,C++向量迭代代码无法编译

Cri*_*ter -2 c++ iterator vector

我有以下for循环,它遍历一个传递给引用传递给const的向量

void PrintVector(const vector<string>& myVector) {
    for(vector<string>::iterator itr = myVector.begin(); itr != myVector.end(); ++itr)
        someFunctionThatTakesAPassByReferenceToConstParameter(itr);
}
Run Code Online (Sandbox Code Playgroud)

迭代器itr作为引用传递给函数someFunctionThatTakesAPassByReferenceToConstParameter().因此,可以保证此函数不会更改迭代器对象.即使这是有保证的,为什么代码不能编译?

编辑:我知道我可以使用const_iterator.但我想知道为什么这不编译.

小智 5

我知道我可以使用const_iterator.但我想知道为什么这不编译.

向量类将具有两个不同的"开始"函数(在constness上重载).就像是:

  const_iterator begin() const { return ...; }
Run Code Online (Sandbox Code Playgroud)

  iterator begin() { return ...; }
Run Code Online (Sandbox Code Playgroud)

由于你有一个对向量的const引用,前者将被调用,并且const_iterator不能转换为迭代器(因为迭代器将能够修改"指向"的值).