![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
vitlic |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Всем привет!
Никак не могу понять куда пропал вызов копиконстрактора, может кто объяснит?! Temp.h
main.cpp
VS2005 выдает:
Кстати если изменить код operator* на:
нет никаких проблем:
пы.сы. Во время постинга кажись догнал, может это из-за оптимизации? |
||||||||||
|
|||||||||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Скорее всего компилер инлайнит operator* на строчке Int k(i*j);, попробуй выключить оптимизацию
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
vitlic |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Пошарил немного в студии, но не нашел, где ее выключают.. Скорее всего, насчет inline, ты прав. Спасибо. Это сообщение отредактировал(а) vitlic - 22.2.2007, 02:41 |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Попробовал на gcc собрать без оптимизации и с флагом -fno-default-inline. Не помогло =)
Дело, может быть, и не в этом. Ведь в данном случае копирование совершенно излишне... -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Да, тут просто оптимизация. Вот этот объект Int(lhs.num*rhs.num) легко и изящно превращается в k
|
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
стандарт разрешает компиллятору преобразовывать программу с целью исключить порождение временных переменных и обращения к конструктору копирования. Большинство компилляторов С++ именно так и делают.
копирайт Дьюхерст. |
|||
|
||||
vitlic |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
"Подобно всем языкам программирования, C++ позволяет разработчикам компиляторов применить оптимизацию для повышения производительности генерируемого кода, и, как оказывается, в некоторых случаях вызовы конструктора и деструктора возвращаемого operator* значения можно безопасно устранить. Когда компилятор пользуется этой возможностью (а часто он так и поступает), ваша программа продолжает делать то, чего вы от нее хотите, и даже быстрее, чем ожидалось. " Мэйерс
Я стормозил немного, рассматривал пример из его книги, написал код дабы проверить некоторые нюансы и застрял пытаясь понять почему так происходит, а ответ был в следующем параграфе ![]() Отсюда вывод при чтение книг, в начале нужно дочитать, а потом уж проверять ![]() 2 Fazil6: Кто такой Дьюхерст? Советуешь почитать? |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
vitlic |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Fazil6 пасиб за наводку, при поиске в яндексе нашел:
"..Особые благодарности Бьярну Страуструпу за постоянную помощь и поддержку и за прекрасный язык, который он подарил нам, а также Стивену Дьюхерсту (Stephen Dewhurst),который так много помогал мне при освоении С++.." Это из предисловия "С++ для начинающих" Липман видать стоит почитать! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |