:
explicit char_separator(const Char* dropped_delims,
const Char* kept_delims = "",
empty_token_policy empty_tokens = drop_empty_tokens)
explicit char_separator()
第一コンストラクタのexplicit
キーワードがchar_separator型のオブジェクトを明示的に作成する必要があります。 What does the explicit keyword mean in C++?は、明示的なキーワードを非常にうまくカバーしています。
第2コンストラクタのキーワードexplicit
はノイズで無視されます。 C++標準から
EDIT
:
7.1.2 P6は告げる:
を明示的に指定のみクラス宣言内 コンストラクタの宣言に使用しなければなりません。 12.3.1を参照してください。
12.3.1 p2が伝え:
明示的なコンストラクタは、単に非明示的な コンストラクタのようなオブジェクトを作成しますが、その場合にのみ、直接の初期化構文 (8.5)またはキャスト(5.2行います。 9、5.4)が明示的に使用される。デフォルトの コンストラクタは、明示的なコンストラクタです。そのようなコンストラクタは、デフォルト初期化または値初期化(8.5)の実行に使用される になります。 [例:
class Z {
public:
explicit Z();
explicit Z(int);
// ...
};
Z a; // OK: default-initialization performed
Z a1 = 1; // error: no implicit conversion
Z a3 = Z(1); // OK: direct initialization syntax used
Z a2(1); // OK: direct initialization syntax used
Z* p = new Z(1); // OK: direct initialization syntax used
Z a4 = (Z)1; // OK: explicit cast used
Z a5 = static_cast<Z>(1); // OK: explicit cast used
末端例]
そこで、explicit
キーワードでデフォルトコンストラクタは、このキーワードなしで同じです。
詐欺ではありません。この質問は 'explicit'キーワードの非常に特殊なコーナーケースについてです。 –
これは関数ではなく、コンストラクタです。http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean/121163#121163 – Skizz
@larsmans見ることなく伝えるのは難しいいくつかの実際の例 –