Re: Инициализация временными объектами
От: Alexander Poluektov Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 09.09.11 10:39
Оценка:
Здравствуйте, iterator it, Вы писали:

II>Казалось бы вызов A a = A(5) должен привести к конструированию и последующему вызову конструктора копирования, но этого не происходит.


II>Вызывается только конструктор A(int).


II>то же самое происходит при вызове

II>f(A(5)); // no copy constructor

II>Как это понимать? implementation defined? или это описано в стандарте?


Компилятор имеет право "выкидывать" копии конструктора копирования в таких случаях -- даже если конструктор копирования и, соответственно, деструктор, имеют побочные эффекты.

Замечу, что g++, начиная как минимум с 4.1 проделывают такую оптимизацию даже без включенных оптимизаций ("в дебаге"), и ее нужно иногда специально давить, чтобы отлавливать некоторые косяки в коде.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.