Почему оператор присваивания не вызывается в этом случае в пользу конструктора копирования?
Со страницы Википедии для конструкторов копирования:
X a = X();
// valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me)
// because the second wants a non-const X&
// to create a, the compiler first creates a temporary by invoking the default constructor
// of X, then uses the copy constructor to initialize as a copy of that temporary.
// For some compilers both versions actually work but this behaviour should not be relied
// upon because it's non-standard.
В частности, часть:
сначала компилятор создает временный объект, вызывая конструктор X по умолчанию, а затем использует конструктор копирования для инициализации в качестве копии этого временного объекта. "
Мой вопрос (при условии, что это правильно), почему это так? Из кода я бы предположил, что компилятор будет использовать оператор присваивания после создания X.I '
м угадать его, потому что назначение происходит в том же выражении, что и инициализация?
Кроме того, что может быть причиной для использования этой формулы, а не просто нормальной инициализацииX a;
или если вы хотите скопировать?X a(b);