我喜欢将我的 C++ 成员变量设置为 const,如果它们在构造对象后不应更改,但是,有时它们需要由 STL 修改。例如,如果我有一个包含 const 成员的类的向量,并且我尝试交换向量中的两个元素,STL 会尝试使用生成的默认值operator=()
,但由于 const 成员变量而失败。
我觉得这operator=()
就像一个构造函数,因为正在创建整个对象,因此想要某种方式来允许operator=()
,同时仍然拥有我的 const 成员变量。
无论如何在C ++ 03中可以做到这一点?如果不是,那么在 C++11 中,也许就地构造是为了这个?
class Foo {
const int _id;
static int _generate_unique_id();
public:
Foo()
: _id(_generate_unique_id()) {
}
};
vector<Foo> foo_vector;
// Fill foo_vector with several entries:
// [...]
// Try to swap the first and second elements of the vector:
swap(*foo_vector.begin(), *(foo_vector.begin() + 1));
// The above fails to compile due to const member variable _id
// prohibits us from using the default assignment operator.