explicitの定義は?
C++においてexplicitについて調べると
explicit <エクスプリシット>
「明示的」
引数をひとつだけ受け取るコンストラクタに付けることのできる C++ 言語のキーワード。
クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。これは暗黙的にコンストラクタが呼び出されるからである。このとき、「コンストラクタの引数」がまるで「関数の引数」であるかのように振る舞ってしまい、本来ならコンパイルエラーとなって欲しい場面でも、見えない部分でコンストラクタが呼ばれることでコンパイルが通ってしまう。その結果、想定していない動作をする可能性がある。
そこで、コンストラクタには「暗示的に呼び出せない」ようにするためのキーワードがある。それが explicit である。このキーワードを付けたコンストラクタは、必ず明示的に呼び出される必要があり、前述のようなことをしようとするとコンパイル時にエラーが発生する。
となっていました
「クラスを関数の引数として使う場合、その関数には、クラスのコンストラクタの引数になっているものも渡すことができてしまう。」
のところが分かりません
具体例で説明してください
例えば
template<class CharType,class Attr=char_traits<CharType>,
Class Allocator=allocator<T> >class basic_string
クラスのコンストラクタが
explicit basic_string(const Allocator &a=Allocator());
ですがこのケースについて説明していただければ幸いです
お礼
助かりました。ありがとうございます。