为什么不能在容器中替换常量对象?

时间:2017-02-07 04:40:20

标签: c++ stl

假设我们有这样一个类:

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编程太过愚弄了。但是,它仍然感觉有点不一致。所以我无法覆盖容器的内容,好吧。但我可以删除,交换,移动它没有问题吗?

0 个答案:

没有答案