C++ メンバー変数を const にするのは、オブジェクトの構築後に変更すべきでない場合は好んで行いますが、STL で変更する必要がある場合もあります。たとえば、const メンバーを持つクラスのベクトルがあり、そのベクトル内の 2 つの要素を交換しようとすると、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.