Копирующая инициализация
class A {
int _x;
public:
A(int x) : _x(x) {}
};
int main()
{
A s = 2; // вот она
}
Я не понимаю как это работает? Так как копирующая инициализация инициализирует объект из другого объекта, компилятор видит литерал int и приводит к типу A, то есть в теории должен вызваться конструктор для создания анонимного объекта, что бы потом вызвать конструктор копирования и инициализировать объект s анонимным объектом? Получается что это будет выглядеть так: A s = A(2);?
На практике компилятор это все оптимизирует будет вызван один конструктор. Получается если ход мыслей верный, то по этой причине копирующая инициализация носит такое название?
Источник: Stack Overflow на русском