![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Ремарка Капитана. Да, в рамках синтаксиса и семантики языка это весьма годная конструкция, но джамшут с borisbn не стандарт языка грызут, а рассуждают о дизайне приложения и его частей, а так же о культуре программирования в общем. С этой точки зрения попытка записи в const-область - весьма нестандартный поступок. Капитан в курсе, что const_cast случается и из-за кривости рук разработчика АПИ.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
специально для Капитана: 1. const- объект далеко не всегда реально константный, всего лишь логически. 2. const_cast бывает нужный не только для убирания константности, но и для ее добавления |
|||
|
||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
reinterpret - это ненормальная практика. Но иногда необходимая (обычно из-за "сишности" или непродуманности используемых библиотек, но не в этом суть).
Ээ.. А можно пример, где это действительно нужно и не произойдёт автоматом? При передачи в функцию, возврате из функции или присваиванию переменной - всегда само отработает (ну это и логично). |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
mes
1. Капитан считает это очевидным:). Он писал не о константной области памяти, а о сферическом нечто, что попадает к нам в руки и представляется константным. В это нечто, по хорошему, писать - ни-ни! 2. Хороший пример. Но тоже весьма нестандартный, значит следует это отметить в коде. Это сообщение отредактировал(а) djamshud - 16.9.2010, 20:45 -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
бывает так, что требуется что то изменить объекту, не меняя при этом логической константности.. пример тот же внутренний кэш.. Это сообщение отредактировал(а) mes - 16.9.2010, 20:58 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
mes, конечно. Это не хак, а гениальный трюк:). И парой камментов раньше я это писал. Но мсье прикопался к "хаку", вот я и раскрывал хаковую часть природы const_cast
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
const - это как правило запрет на запись времени компиляции, не более того.
Это нормально, если внутри библиотеки объект mutable, а во внешнем интерфейсе библиотеки он const, чтоб пользовательский код его не трогал.
|
|||
|
||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Да, согласен. Хотя логически это всё равно очень странно. Обычно константная и неконстантная версия одного метода делают одно и тоже. Иначе это слишком неочевидно, как я считаю (с точки зрения конечного пользователя). Добавлено через 1 минуту и 49 секунд
Ну что-то мне подсказывает, что для локальных переменных "простых типов" const будет означать либо их непосредственную подстановку, либо (если это массив или структура) запись данных в "неменяемую" область памяти. Хотя, очевидно, это компиляторозависимо и т. д. |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Во время конпеляции конст вообще не играет никакой роли. Именно потому кстати, что в рантайме от нее можно избавиться. Никакие механизмы оптимизации не рассматривают конст как показатель. Константность - плюшка для программиста, и все.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
чтоб далеко не ходить : оператор [] при CopyOnWrite Добавлено через 6 минут и 40 секунд прям уж никакой ? а как ?.. а в компил-тайм нельзя избавиться ? а знаете почему вектор ругается , когда в него auto_ptr запихивают ? а как работает вышеупомянутое CopyOnWrite ? и многое другое что с разбегу в голову не приходит.. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Я прекрасно знаю, как работает КоВ. По собственному опыту. И благодаря плюшки для программиста в виде константности она реализовывается. Впрочем без нее тоже можно сделать без проблем, но накладных расходов чуть больше.
>прям уж никакой ? Помимо собственно семантического анализа (что консту можно, а что - нет) и того, что компилятор может размещать статические объекты в константной области памяти, никакой. >а как ?.. а в компил-тайм нельзя избавиться ? Кастованием. В компил-тайм компилятор не знает, к каким именно объектам будут применяться неконстантные методы в рантайме. То есть предполагается, что с объектом в рантайме может твориться все, что угодно. Поэтому он никогда не доверяет констам во время проведения оптимизации, самостоятельно вычисляя в какие моменты (участки выполнения) те или иные объекты стопроцентно не будут изменены. >а знаете почему вектор ругается , когда в него auto_ptr запихивают ? >а как работает вышеупомянутое CopyOnWrite ? >и многое другое что с разбегу в голову не приходит.. Это все и есть плюшка. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
стыд позор. это же уг. при том древний. Добавлено через 43 секунды зы как отписаться от темы? достали уже уведомления |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
boostcoder, фи, отписаться... А как же поучаствовать в сраче?:)
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |