假设我们有这样一个类:
class A {
public:
A(int aa)
: a(aa) {
}
const int a;
};
a
是公共财产。如果我不希望任何人乱搞并改变它,我必须做到const
,这是公平的。
我不明白为什么我不能在容器中操纵这样的类?最简单的情况是替换:
std::vector<A> v;
v.push_back(A(10)); // QVector::append() fails even here
v[0] = A(20); // no-go even for plain vector
当然我知道这个操作背后的技术背景(基本上只是覆盖属于旧实例的内存)但我的问题是我应该如何操纵这样的容器类?
假设我想用其他一些操作替换每一个A
实例。我每次都要创建新的容器吗?
老实说,这个发现令人惊讶,我一直认为const变量是给定类的局部变量,即它们没有外部副作用。复制构造函数在这里没有帮助(写入const变量)所以我不知道,也许其中一个新的C ++ 11移动将在某种程度上帮助吗?
修改
你们是对的,我被Java编程太过愚弄了。但是,它仍然感觉有点不一致。所以我无法覆盖容器的内容,好吧。但我可以删除,交换,移动它没有问题吗?