gpt4 book ai didi

c++ - 为什么在 const_iterator 中没有编译器强制执行

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:01 27 4
gpt4 key购买 nike

考虑以下代码:

#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 的错误期望?

最佳答案

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

你不是在改变指针,你是在改变指针指向的对象。

如果您尝试为容器中的该元素分配一个新指针,它将无法编译:

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

关于c++ - 为什么在 const_iterator 中没有编译器强制执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1801389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com