![]() |
|
Модераторы: bsa |
![]()
|
|
| Selat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 3.6.2012 Репутация: нет Всего: нет |
Почему сначала выводится "Hello from fn()", и только потом "the result is 5"? Да, кстати, ещё один вопрос: зачем в С++ типы long и long double? По крайней мере на большинстве 32-х битных системах ведь ничем не отличаются соответственно от int и double? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| Selat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 3.6.2012 Репутация: нет Всего: нет |
Объясните пожалуйста мне, непонимающему, почему такой порядок? Ведь первым стоит "The result is"?
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
потому что вся эта строка - одна рекурсивная инструкция. и для того чтоб она(инструкция) выполнилась, необходимо сначало выполнить все использующиеся в ней операции/вызовы.
|
|||
|
||||
| Selat |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 3.6.2012 Репутация: нет Всего: нет |
Спасибо! А ответите на второй вопрос?
Это сообщение отредактировал(а) Selat - 4.7.2012, 14:18 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
во-первых - потому что С/С++ не только на 32ух битных системах.
во-вторых - потому что некоторые реализации имеют отличие в размере лонга и инта. в-третиьх - потому что код на С/С++ иногда пишется с расчетом на несколько платформ/разрядностей. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
там встречается, но не только там. это так в любом случае ленивой передачи параметров (например, смоделированной перегрузкой операций в C++) нет тут рекурсии. есть просто вызов функции, в которую передается результат вызова fn(). т.е. fn() вызывается перед этой строчкой, и её вывод появляется раньше. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
boostcoder, Вы меня, конечно, простите, но это не рекурсия))))
Добавлено через 5 минут и 31 секунду рекурсия - самоподобие
сравните с
|
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
ну да, не рекурсия) я просто не мог вспомнить как это называется. |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Это функция с побочным эффектом. Результат зависит от того, какой порядок вычислений выберет компилятор.
Так:
Или так:
Это сообщение отредактировал(а) math64 - 5.7.2012, 07:47 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
| korian |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
разве тут четкий порядок? на сколько я понимаю
эквиваленто этому:
и если я прав, то тут одному компилятору известен порядок вычисления аргументов. или где-то я не прав? Это сообщение отредактировал(а) korian - 16.7.2012, 22:40 |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
точно. похоже, не прав был я. Что-то не разглядел... старею.
|
|||
|
||||
![]()
|
| Правила форума "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. |