Подтвердить что ты не робот

Явное ключевое слово С++ для функции без аргументов

Возможный дубликат:
Что означает явное ключевое слово в С++?

Есть ли причина использовать ключевое слово explicit для функции, которая не принимает никаких аргументов? Это имеет какой-то эффект? Мне интересно, потому что я просто наткнулся на линию

explicit char_separator()

ближе к концу страницы documenting boost:: char_separator (http://www.boost.org/doc/libs/1_47_0/libs/tokenizer/char_separator.htm), но это еще не объяснено.

4b9b3361

Ответ 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 является таким же, как без этого ключевого слова.