最近、私は添字演算子のマップについて混乱しました。たとえば のために、コードがC++添字演算子について
#include <map>
class A{
public:
int a;
A(){cout << "default constructor" <<endl;}
A(int a){
cout << "user_defined constructor" <<endl;
this->a = a;
}
A(const A& tmp){
cout << "copy constructor" <<endl;
this->a = tmp.a;
}
A& operator= (const A& tmp){
cout << "assign constructor" <<endl;
this->a = tmp.a;
return *this;
}
};
int main(){
std::map<int, A> m;
m[1] = A(1); // error occur right?
m.insert (make_pair(1,A(1))); // ok
}
以下のようになります。私たちはコードを書く時に何が起こったかを知ってほしいです。
m[1] = A(1); // it will first make a empty pair ? right?
m.insert (make_pair(1,A())); // here call default constructor
次に、代入コンストラクタまたはコピーコンストラクタを呼び出しますか? 出力は
user_defined constructor
default constructor
copy constructor
copy constructor
assign constructor
あなたはどうもありがとう、私に詳細を説明することができます。
'A'はデフォルトで構成可能ではありません。' map'の値はできません。 – KABoissonneault
@KABoissonneault:可能です。その場合、 'operator []'を使うことはできません。 –
どのような "詳細"が必要ですか? – Hayt