![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
Из книги "Стандарты программирования на C++" Герб Саттер, Андрей Александреску
не знаю, может те преобразования входят в число "некоторых гарантированно обратимых преобразований". в этой книги они не описаны, надо читать стандарт. |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
http://www.comeaucomputing.com/ такой код не компилит а Borland C++ Builder хавает ![]() |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
вы о чем, сударь? ![]() мне адрес надо получить, что я и делаю это раз во-вторых, размер указателя фиксирован разрядностью процессора и не важно какого он типа Добавлено @ 22:10 это неправильно если предположить, что такой каст прокатывает, то я удивляюсь, что результат является адресом (а он точно им является?) ![]() семантически результат в таком случае должен быть равен значению объекта c, приведенного к указателю а значение объекта недетерминировано, т. к класс не определяет ни одного поля в таком случае размер объекта c обычно 1 и соответствующий байт должен быть беззнаково дополнен до 32-х (64-х) разрядов Добавлено @ 22:17 зачем такой изврат?
Это сообщение отредактировал(а) MAKCim - 18.3.2008, 22:17 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
korian |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
ключевая фраза - работать на любых платформах. а у вас уже привязка к конкретному процессору. C++ не оговаривает, что все указатели имеют один размер.
полностью согласен. Это сообщение отредактировал(а) korian - 18.3.2008, 23:35 |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
указатель (aka адрес) имеет один и тот же размер в рамках одной платформы его размер не зависит от типа адрес - это понятие, вообще не связанное с С++ -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
MAKCim, можно ссылку на стандарт, если есть?
Добавлено через 1 минуту и 25 секунд честно говоря не знаю, но, думаю, если бы он (такой изврат) не был нужен, то в бусте его бы и не было |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
это очевидно ты сам подумай указатель определяет адрес от изменения типа переменной, адрес которой содержит указатель, размер адреса измениться не может это по определению Добавлено через 1 минуту и 12 секунд
"не видел, но осуждаю" ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Допустим есть некая платформа, в которой есть 2 вида указателей - на мелкие объекты и на большие обьеты (< 1'000'000 бит). Размеры у них (указателей) разные, так как памяти максимум 100'000'000 бит. потому указатели на мелкие объекты должны иметь одно из 100 млн значений, а указатели на большие обьекты - всего лишь 1 из сотни (из-за выравнивания). Потому указатели на мелкие обьекты состоят из 20 бит, а на большие - из 7 бит.
И из-за того. что на C++ на такой платформе работать нельзя? По-моему такие "мелочи" должны быть оговорены в стандарте. |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
нет таких платформ. Нет смысла реализовывать указатели разного размера. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
vinter, DOS.
Там есть far и near указатели. |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
vinter, откуда знаешь?
вопрос на засыпку - есть ли платформы, у которых в байте нецелое число бит? |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
vinter, в стандарте говорится, что void* может вместить любой другой указатель. Но не говорится, что они все обязаны быть одинакового размера.
|
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
хорошо, поставим вопрос по другому. Назовите хоть одну(из нынедействующих) систем, где используются разные размеры указателей.
так с этим никто не спорит, только вот указатели это платформенная фича, а не языковая. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
В том то и дело, что указатель - это языковая вещь. На ассемблере понятия указателя нет, есть понятие адрес.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |