operator =()を使用せずにC++のstd :: vectorにpush_back()を行うにはどのようにconstメンバーを持つデフォルト定義に違反していますか?constメンバーのoperator =()を使用しないpush_backの方法は?
struct Item {
Item(int value)
: _value(value) {
}
const char _value;
}
vector<Item> items;
items.push_back(Item(3));
オブジェクトが作成された後、それは変更すべきではありませんので、ご質問は、私は演算子=を(起動せずに要素を持つ私のベクトルを初期化しない方法ですので、私は)、_valueのCONSTを維持したいのですが? std::vector<T>
については
.../3.4.6/bits/vector.tcc: In member function `Item& Item::operator=(const Item&)':
.../3.4.6/bits/vector.tcc:238: instantiated from `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Item, _Alloc = std::allocator<Item>]'
.../3.4.6/bits/stl_vector.h:564: instantiated from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Item, _Alloc = std::allocator<Item>]'
item.cpp:170: instantiated from here
.../3.4.6/bits/vector.tcc:238: error: non-static const member `const char Item::_value', can't use default assignment operator
私はうまくいくはずだと思います。私はなぜあなたが 'operator ='について話しているのだろうと思っています。それはどこにも呼ばれません。 – Nawaz
'push_back'は' operator =() 'を呼び出す必要はなく、コピーコンストラクタを使ってコンテナに追加されるオブジェクトのコピーを作成するだけです。何が問題なのですか? –
@Als追加したエラーメッセージを参照してください。 – WilliamKF