Ответ 1
Чтение объяснение участников:
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.
Что означает явное ключевое слово в С++? очень хорошо описывает явное ключевое слово.
Ключевое слово explicit
для второго конструктора представляет собой шум и игнорируется.
ИЗМЕНИТЬ
Из стандарта С++:
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
-end пример]
Таким образом, конструктор по умолчанию с ключевым словом explicit
является таким же, как без этого ключевого слова.