ややプログラム紀行

博士2年のプログラムに関する日記

explicit

C++のクラスのコンストラクタにつけるやつで、「explicit」っていうのがありますよね

明示的なコンストラクタってやつです

あれをスマートポインターとかのコンストラクターにつけて、そのスマポ型vectorをつくったりすると、値をvectorのpush_backでスマポに直接いれることができなくなります

え~とこんな感じです

class IntClass{

explicit IntClass(int a){} //explicitのコンストラクタ

};

SmartPtr<IntClass> sp; //これはIntClass型スマートポインター

vector< SmartPtr<int> > sps; //これはIntClass型スマポのvetor

sps.push_back(10); //これができない!(多分)

ここまで書いてあれなんですけど、このexplicit、スマートポインターとかによく使われる理由ってなんでしょうか・・・

ネットで検索してみると結構explicitつけてるのが多いんですが、いまいち必要性がわかりません