Явный конструктор не одного параметра
Кто-нибудь может объяснить, почему конструктор не одного параметра помечен как явная компиляция? Насколько я понимаю, это абсолютно бесполезное ключевое слово, так почему же это компилируется без ошибок?
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 конструкторы с несколькими аргументами могут быть неявно преобразованы с помощью инициализации скобки.