R.12.3.1 Преобразование с помощью конструктора

R.12.3.1 Преобразование с помощью конструктора

Конструктор, имеющий единственный параметр, задает преобразование типа своего фактического параметра в тип его класса, например:

class X {

 //…

public:

 X(int);

 X(const char*, int = 0);

};

void f(X arg) {

 X a = 1; // a = X(1);

 X b = "Jessie"; // b = X("Jessie",0)

 a = 2; // a = X(2)

 f(3); // f(X(3))

}

Если в классе X нет конструктора, который допускает заданный тип, не делается попытки найти какой-либо конструктор другого класса или функцию преобразования для приведения заданного значения в значение типа,допустимого для конструктора класса X, например:

class X { /*… */ X(int); };

class Y { /*… */ Y(X); };

Y a = 1; // недопустимо: преобразование Y(X(1))

  // не применяется