| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Использование собственного инициализатора |
| Автор: Kuvaldis 16.10.2007, 01:53 | ||
| Наткнулся на такую задачку у Страуструпа: Найдите пример, когда имеет смысл воспользоваться именем в его собственном инициализаторе. Как я понимаю, должно быть что-то вроде такого:
Но моя башка отказывается производить какие-либо здравые идеи. Что имел в виду Страуструп? |
| Автор: Daevaorn 16.10.2007, 08:28 | ||
? |
| Автор: archimed7592 16.10.2007, 09:03 |
| Daevaorn, ну это же имена разных сущностей |
| Автор: Daevaorn 16.10.2007, 09:08 |
но одинаковые же имена;) |
| Автор: akizelokro 16.10.2007, 09:43 | ||
| "Найдите пример, когда имеет смысл воспользоваться именем в его собственном инициализаторе." Раз ни у кого нет здравых замечаний, тогда уже пропишусь я. Подобный пример приведен у Стэнли Б.Липпмана. Daeavaorn прописал только окончание примера. Пример используется для обучения новичков (используется в образовательных целях), чтобы рассмотреть область видимости класса.
Ну, здесь я прикопался к словам автора темы. Специально для экспертов поясню, что это шутка. |
| Автор: Kuvaldis 16.10.2007, 10:07 |
| Daevaorn, akizelokro, правы, черт возьми. А я тупанул :( Вопрос закрыт. |
| Автор: akizelokro 16.10.2007, 10:18 | ||
| Теперь без шуточек. У Страуструпа написано, что иногда важен порядок инициализации. Возможно ли это объяснение? Еще я вчера ковырялся над примером, как обойти обязательную инициализацию const члена класса. Пробовал это сделать через union, но посчитал, что анонимное объединение накладывает слишком много дополнительных требований, поэтому попытался выкинуть фортель вида
При определенных условиях (если компилятор не зачищает уже выделенную память из хипа) , это может пройти. И в этом случае какая-то информация (возможно полезная уже содержится даже перед инициализацией обьекта). Но тут мне не хватает знаний и я еще подумаю.. |
| Автор: akizelokro 16.10.2007, 11:14 | ||
Нет, с этим примером то как раз все понятно. Правильно задать вопрос я сейчас просто не могу, так что вам придется подождать.
Ну с этим достаточно тоже все просто (в границах проработанных разделов). Но я для себя при подготовке считаю, что должен знать и как "надо" писать код, и как "нужно" и как не надо. В этом мой подход отличается. |
| Автор: maxim1000 16.10.2007, 13:05 | ||
а что, если так:
? |
| Автор: archimed7592 16.10.2007, 13:55 |
| Гхм... Вродь как имя инжектиться в scope только после declaration-statement... Почему тогда это компилируется? 0_о Добавлено через 18 секунд (mingw-g++-3.4.2) |
| Автор: maxim1000 16.10.2007, 14:30 |
вообще-то я не пробовал скомпилить, просто пытался придумать ситуацию, когда это теоретически может пригодиться, не обязательно корректную... |
| Автор: archimed7592 16.10.2007, 14:39 |
| И тем не менее, вопрос, почему это компилируется остаётся открытым |
| Автор: UnrealMan 16.10.2007, 18:00 | ||
Вполне корректный (с точки зрения компилируемости) код. |
| Автор: SergeCpp 16.10.2007, 23:26 | ||
Относительно заглавного вопроса темы, помнится, http://sergecpp.mylivepage.ru/file/1/701/
|
| Автор: UnrealMan 17.10.2007, 10:29 | ||||||
С таким же успехом ты мог использовать
Добавлено через 3 минуты и 42 секунды Если только ты не на VC++6.0 это писал - он нарушает стандарт и инициализирует локальные переменные значениями одноимённых переменных из внешней области видимости. |
| Автор: archimed7592 17.10.2007, 10:50 |
С какого перепугу? scope разные... Покажи, где в стандарте сказано, что так нельзя... |
| Автор: UnrealMan 17.10.2007, 11:15 | ||||||
Данный случай не подпадает под исключения.
|
| Автор: archimed7592 17.10.2007, 11:21 |
| Ок, спасибо. |
| Автор: akizelokro 17.10.2007, 13:24 | ||
Все-таки я грешу на порядок инициализации. Если, конечно, это задание из первых изданий. Потому что если сослаться на Страуструпа, то при переносе кода на другие компиляторы бывает важен порядок инициализации, а первые версии не поддерживали его. Хотя, если это все-таки одно из первых изданий, там Страуструп не был еще так чинен и иногда шутил ("напишите программу, чтобы запутать любого. поделитесь с приятелем"). |