В С++ 11 конструктор без explicit
ключевого слова может использоваться для неявного преобразования списка аргументов в его класс. Например:
class Date{
private:
int d, m, y;
public:
Date(int _d, int _m=0, int _y=0) : m(_m), d(_d), y(_y) {}
friend bool operator==(const Date &x, const Date &y) {return x.d==y.d;}
};
int main()
{
Date x = {1,2,3}; // no error; using converting constructor
x == 1; // no error; converting constructor turns int into Date object
x == {1,2,3}; // error
}
Для x == {1,2,3}
я получил следующую ошибку:
explicit.cc:16:10: error: expected primary-expression before ‘{ token
x=={1,2,3};
^
Мне интересно, почему преобразование конструктора не конвертирует список {1,2,3}
в объект Date
? Тем более, что x == 1
не приводит к ошибке, почему x == {1,2,3}
?