Явный конструктор не одного параметра

Кто-нибудь может объяснить, почему конструктор не одного параметра помечен как явная компиляция? Насколько я понимаю, это абсолютно бесполезное ключевое слово, так почему же это компилируется без ошибок?

class X
{
public:
    explicit X(int a, int b) { /* ... */}
};

2 ответа

Решение

В C++03 и в этом конкретном случае нет смысла отмечать двухпараметрический конструктор explicit, Но это может иметь смысл здесь:

explicit X(int i, int j=42);

Таким образом, отмечая двухпараметрический конструктор explicit Не должно быть ошибки.

В C++11 такое использование явного не позволит вам сделать это:

X x = {1,2};

Не совсем верно.

В C++11 конструкторы с несколькими аргументами могут быть неявно преобразованы с помощью инициализации скобки.

Другие вопросы по тегам