Re[2]: operator float () ... вопрос
От: remark Россия http://www.1024cores.net/
Дата: 05.02.08 13:42
Оценка: 28 (1)
Здравствуйте, remark, Вы писали:

R>Здравствуйте, tealex, Вы писали:


T>>О всевышний ! Ответь мне на вопрос !


T>> Counter (Counter const& x)


Посколько конструктор копирования принимает только неконстантную ссылку, то компилятор не может скопировать временную переменную, созданную в operator++() в возвращаемое значение. Поэтому msvc производит достаточно странную последовательность действий. Она вызывает у временного объекта operator float(), потом преобразует float в int, потом конструирует возвращаемое значение с помощью этого int'а.
Подозреваю, что такая последовательность преобразований является расширением msvc и не соотв. стандарту, т.к. содержит 2 пользовательских преобразования.
Если быть более точным, то msvc может связать временный объект и неконстантную ссылку. Просто видимо она считает это преобразование менее приоритетным. Сказать тут что-либо сложно, т.к. оба преобразования — расширения msvc. А эти расширения являются большей частью недокументированными.
Если это всё подытожить, то надо передавать копию в конструктор копирования как константную ссылку.

R>


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.