|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.06.2012, 20:57 | #11 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
C++ (gcc-4.3.4) http://ideone.com/hWYM9 GCC-4.7.0 set as default compiler http://liveworkspace.org/code/a5b3b6...2fd63494cefbeb А вот на этом компиляторе произошла осечка: C++: g++ 4.1.2 http://codepad.org/JSsjjgRF И вопрос: в чем тут подвох, и чей косяк актуальный. Что характерно - последний компиль является относительно старым. 2. Обрати внимание на сам код. Я добавил туда парочку методов для наглядности: Код:
Код:
Лично я очень удивлен. Ты можешь как то объяснить происходящее? А уж коли объект не константный, то и не обязан бегать по константным ссылкам. Разве не так? Ну и наконец, в коде: Код:
Давайте проверим, когда именно тут срабатывает конструктор копии. Для этого я определяю явный operator= с каутом, и в сам копирующий конструктор так же вставляю каут. И мы увидим всю эту кухню при использовании тех компиляторов, которые способны прожевать этот код: http://ideone.com/6bllO Видно, что сработал только один копирующий конструктор ещё внутри метода. Когда метод отработал, можно предположить, что раз он возвращает по значению - запустится ещё один копирующий конструктор. Но этого почему то не произошло. Потом сразу запускается operator= принимающий объект по константной ссылке. Ну а теперь, самое главное, и касается вопроса ужаваемой Лето: Старый компилятор. Смотрите: http://codepad.org/G8tlCQKz Я сделал человечный копирующий конструктор и все сразу скомпилировать. И о боже! Мы видим ещё один копирующий конструктор! Причем перед самым запуском operator= Это именно тот самый конструктор, который и создает временные объекты. Которые хотя и считают себя почему то "не константными", но видимо передавать знание о них можно только по константным ссылкам. И они просят копирующие конструкторы, которые принимают по константным ссылкам. А что касается новых компиляторов - возможно, учитывая что никаких дополнительных конструкторов у них не вызывается,(вероятно, там просто оптимизировали этот момент), то стало быть и константность ссылки в конструкторах не обязательна. Но это лишь мои догадки. Последний раз редактировалось _Bers; 13.06.2012 в 21:05. |
|
13.06.2012, 21:53 | #12 | |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Цитата:
А вот про константные ссылки - рушит представление о мире.
Форматируйте код, будьте людьми.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблемы с конструктором | Merovingian | Общие вопросы C/C++ | 8 | 28.09.2011 14:55 |
Проблема с конструктором | igor17 | Общие вопросы C/C++ | 13 | 15.05.2011 22:23 |
Макрос для копирования значений из нескольких файлов в один общий с определенным условием копирования | zenner | Microsoft Office Excel | 0 | 21.03.2011 14:48 |
Что-то не так с конструктором | Дырдин | Общие вопросы C/C++ | 7 | 26.03.2010 18:33 |
Помогите с конструктором | girkoff | Общие вопросы C/C++ | 10 | 01.11.2009 16:01 |