Может кто-нибудь объяснить, почему конструктор не одного параметра помечен как явная компиляция?
Насколько я понимаю, это абсолютно бесполезное ключевое слово, так почему же это компилируется без ошибок?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
В C ++ 03 и в этом конкретном случае нет смысла отмечать двухпараметрический конструктор explicit
, Но это может иметь смысл здесь:
explicit X(int i, int j=42);
Таким образом, отмечая двухпараметрический конструктор explicit
Не должно быть ошибки.
В C ++ 11 такое использование явного не позволит вам сделать это:
X x = {1,2};
Не совсем верно.
В C ++ 11 конструкторы с несколькими аргументами могут быть неявно преобразованы с помощью инициализации скобки.