![]() |
|
Модераторы: bsa |
![]()
|
|
| Dibilkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.1.2009 Репутация: нет Всего: нет |
Всем трям. Решил на днях разобраться с C++. Засел за книгу Джесса Либерти, дошел до главы «Дополнительные возможности функций», и… вот я здесь
Думаю, код в комментраиях не нуждается, все просто и прозрачно. Но вот мне очень хочется узнать: 1. Строки 8, 22. Мы возвращаем ссылку на постоянный объект класса SimpleCircle? Если да, то почему в 25-ой строке мы возвращаем непосредственно объект? 2. Строка 30. Мы создаем временный объект класса SimpleCircle, передавая в конструктор текущий объект? Если да, то что с переданным объектом делает компилятор, ведь конструктор класса SimpleCircle не обучен принимать какие-то ни было значения? Понимаю, что мои вопросы напомнинают «почемучку» детей дошкольного возраста, интересующихся, почему же небо, туды-его-растуды, голубое, но я был бы очень признателен, если бы кто-то нашел возможность уделить мне несколько минут своего свободного времени и помог бы пролить свет на эти восьмые, девятые и т.д. по списку чудеса света |
|||
|
||||
| pan2004 |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 2 Всего: 9 |
В функции
мы возвращаем ссылку на *this, чтобы избежать(возможного, но лишнего) копирования. Мы можем это сделать, потому что время жизни объекта this не ограничено временем выполнения этой функции.члена класса. Здесь же
мы не можем вернуть ссылку на temp, потому что эта переменная локальная в пределах данной функции, и по выходу она прекратит свое существование. Ссылка в таком случае указывала бы на уже не существующий объект.
У класса всегда есть(явно или неявно) конструктор-копировщик, имеющий сигнатуру SimpleCircle(const SimpleCircle&). Так что все нормально, вызовется этот конструктор. Вы могли заметить, что происходит слишком много операций копирования, фактически лишние. Современные компиляторы, однако, достаточно умны, чтобы оптимизировать подобные случаи. Так что в release версии, вполне возможно, копий и временных объектов создаваться не будет Добавлено через 1 минуту и 50 секунд Вообще, второй оператор не должен(не обязан) возвращать константный объект. |
||||||||
|
|||||||||
| Dibilkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.1.2009 Репутация: нет Всего: нет |
pan2004, спасибо большое! Разобрался
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |