Когда вызывается конструктор преобразования? (С++)

Конструктор преобразования вызывается в 3 случаях. В каких именно?


Ответы (1 шт):

Автор решения: EOF

Допустим есть следующий класс:

class MyIntClass
{
private:
    int val_;
public:
    MyIntClass(int val) : val_(val) {}   // Тот самый конструктор преобразования
};

Вот случаи, когда будет вызван именно этот конструктор:

  1. При использовании синтаксиса присваивания для инициализации обьекта значением типа int. Т.е. типа аргумента конструктора преобразования.
MyIntClass obj = 1; // Вызов конструктора преобразования.
  1. При передаче в функцию значения типа int, которая ожидает обьект класса MyIntClass.
void func(MyIntClass mic) {}
...
func(1); // Вызов конструктора преобразования для создания обьекта класса MyIntClass.
  1. Когда функция обьявлена как возвращающая MyIntClass, но в теле возвращает int.
MyIntClass func()
{
    return 1; // Вызов конструктора преобразования для создания обьекта класса MyIntClass.
}
  1. Как заметил dIm0n, конструктор преобразования также вызывается при преобразовании int в MyIntClass используя операторы преобразования.
static_cast<MyIntClass>(1); // Вызов конструктора преобразования для создания обьекта класса MyIntClass.
→ Ссылка