когда в инициализации C ++ используется только конструктор копирования, а когда используется конструктор копирования и оператор присваивания

Я прочитал в C ++ учебник для начинающих плюс вот говоритРеализации имеют возможность обрабатывать этот оператор в два этапа: с помощью конструктора копирования для создания временного объекта и затем с помощью присваивания для копирования значений в новый объект. То есть инициализация всегда вызывает конструктор копирования, а формы создаются с использованием оператора =также может вызывать оператор присваиванияИ я также читал на некоторых веб-сайтах, где написано, что код вроде ---- +: = 0 =: + ---- такой же, как ---- +: = 1 =: + ---- , что означает---- +: = 2 =: + ---- только вызывает конструктор копирования.Поэтому мой вопрос в том, что когда программа использует только конструктор копирования и когда она использует и конструктор копирования, и оператор присваивания.И кто решает, компилятор?
c++
4 голоса | спросил taotsi 19 +03002018-10-19T20:58:01+03:00312018bEurope/MoscowFri, 19 Oct 2018 20:58:01 +0300 2018, 20:58:01

1 ответ


0
Операторы инициализации C ++, такие какникогда не используйте перегруженный оператор присваивания.Только заявления типабудет когда-либо использовать оператор присваивания.Разница в том, что если вы видите ---- +: = 2 =: + ---- в той же строке, что и определение переменной (с типом впереди), это считается инициализацией компилятором, ине назначение .Конструктор копирования и оператор присваивания никогда не будут использоваться одновременно.Реализации имеют возможность обрабатывать этот оператор в два этапа: с помощью конструктора копирования для создания временного объекта и затем с помощью присваивания для копирования значений в новый объект. То есть инициализация всегда вызывает конструктор копирования, а формы создаются с использованием оператора =также может вызывать оператор присваиванияВаша книга, вероятно, ошибается по этому поводу (по крайней мере, я никогда не замечал, чтобы какая-либо реализация компилятора работала таким образом), или вы неверно истолковали это утверждение из контекста.
ответил πάντα ῥεῖ 19 +03002018-10-19T21:06:10+03:00312018bEurope/MoscowFri, 19 Oct 2018 21:06:10 +0300 2018, 21:06:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132