Перейти к содержанию
    

А вот тут zltigo не прав. Цитирую Страуструпа:

Это всего лишь личное мнение Страуструпа :-)))) который и затвердил :-( его в своей реализации ++.

Личное мнение Страуструпа является стандартом - он автор. :)

 

Я не слишком слежу за процессом стандартизации C++, но похоже комитет пока еще не родил

стандарта :-(.

Стандарт давно принят - аж в 1998 году. Уже приличное время ходят обсуждения следующей версии.

 

Короче в С++ болезнь вместо лечения ( введением ключевого слова, как в Паскале) была загнана вовнутрь наложением исскуственного требования иметь внутреннее представление нулевых указателей нулевым. И с легкостью необыкновенной считать, что ключевое слово для нулевого указателя это "0".

Какая болезнь? Отказ от определения NULL, как (void*)0? Сказано же, что объектов по нулевому адресу быть не может, поэтому указатель с адресом 0 невалиден. И 0 вполне однозначно определяет ситуацию благодаря стандартному преобразованию типа. Зачем тут плодить лишние сущности языка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моей полной цитате речь шла о проблеме более широко:

- не только по отношению к C++, но и к C (более того это был именно кусок по С );

- по отношению к разным платформам, как например должен выглядеть Страуструповский

0 на платформе типа Cray-Cyber с кольцевыми указателями?

А разве в С есть operator new?

Про Cray не знаю ничего кроме "Цыпленок Cray перебежит дорогу быстрее всех, но если перед стартом его не окунуть в жидкий азот, то на той стороне дороги он появится в уже зажаренном виде" :-) На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. По-моему так! (с) Винни-Пух.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая болезнь? Отказ от определения NULL, как (void*)0?

Нет, отсутствие ключевого слова для нулевого указателя.

Сказано же, что объектов по нулевому адресу быть не может...

Так папа сказал. Аминь.

А нежели кому в железе чего такого захочется сотворить:

На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает.

Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к

"принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается

разобраться. Не по душе мне такой уровень абстракции :-(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, отсутствие ключевого слова для нулевого указателя.

Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ? Уровень языка (достаточно низкий) и подразумевает изпользование константы. И большое спасибо, а то бы получился очередной паскаль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ?

Какая разница какое( ну NIL ). Любое, главное не строились мутные на мой взгляд преобразования типа "ничего не возвратили" поскольку вообще-то оттуда возвращают указатели, то будем считать,

что возвратили "никакой указатель" далее считаем, что по никакому указателю лежит "ничего"

ну а дальше просто пусть это ничего будет "0" - так и запишем :-(

И большое спасибо, а то бы получился очередной паскаль.

Вы часом меня не за преверженца Паскаля да еще в его Борландовской реинкарнации приняли? Отвечу - нет, что отнюдь не заставляет меня априори его не признавать и не замечать его

отдельные достоинства в части четкости выражения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая болезнь? Отказ от определения NULL, как (void*)0?

Нет, отсутствие ключевого слова для нулевого указателя.

Если так хоцца слово, то Вы можете его сами себе сотворить по вкусу - Сергей Борщ приводил цитату, там как раз было именно это. Заодно снимаются вопросы о самом слове - какое хоцца, такое и используйте. Вполне гибко и демократично. А в языке слова нет просто потому, что оно реально не нужно. Это лишняя сущность. Язык С++ и без этого достаточно сложен и чрезвычайно перегружен, поэтому сделано по минимуму. Все логично. А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) :)

 

Сказано же, что объектов по нулевому адресу быть не может...

Так папа сказал. Аминь.

Ну, если папа - Деннис Ричи, то да. :)

 

На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает.

Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к

"принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается

разобраться. Не по душе мне такой уровень абстракции :-(

Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Все там вполне однозначно. И физическое представление нулевого указателя вполне конкретно, просто оно определяется не Стандартом, а реализацией, только и всего, что опять же вполне логично. На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Наличие специального ключевого слова совершенно ничего не меняет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) :)

И я ей пользуюсь :-) Ибо, как минимум, не люблю веспорядочно расскиданные по тексту "0" :-)

А вообще сыр-бор с уходом в сторону от темы new() в тему NULL начался с моей фразы:

Ну а то, что автору, цитаты, что NULL, что 'zero' все едино - еще раз указывает на его некомпетентность.

При этом имелось ввиду отнюдь не способность компилятора разобраться в контексте, а покоробившее меня поминание именно "0" вместо "нулевого указателя" в качестве значения возврашаемого функцией для которой возврашаемым значением является указатель. Я понимаю,

что в данной MS инструкции (а это именно четкая фраза от MS - можете поиском воспользоваться) указывается прямое действие пользователю - "пиши 0 и не парься", но тем не менее, подмена физической сущности в инструкции мне не нравится.

 

Мни кажется, что Вы все-таки излишне драматизируете ситуацию.

Да нет, так - шероховатость, просто это привлекло неожиданно для меня самого повышенное внимание и понеслось....

 

На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0.

Аналогично :-). Нынеживущие платформы наверное все такие. Ну а в будующем? Не знаю даже.

Ведь всяких архитектур с ненулевыми нулевыми указателями и с указателями разных размеров для

разных типов указателей было немало. Это было в эпоху, когда за счет архитектурных ухищрений

добивались упрощения и/или увеличения производительности. Потом настали времена когда

"патронов не жалеть" (в смысле транзисторов) и мегагерцы гнались легко. Сейчас лафа кончается -

мегагерцы на исходе и пожалуй опять начнутся архитектурные гонки. И каким будет физическое представление нулевого указателя - это вопрос :-). Компиляторы конечно разберутся с "0" и в этом

случае, но не красиво это как-то. Вот собственно пожалуй и все по теме "0" и "нулевой указатель"

неожиданно вылезшей в теме по MMU.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот мои 5 рублей.

Мне вот тоже не нравится такое неуважительное отношение к нулевому указателю. В Паскале, с которого я начинал это сделано более чем идеально. Ну а стандарт С++ из-за этого какой-то "кривой". (редко я соглашаюсь с zltigo)

 

Писал как-то свой менеджер памяти на 486 системе. Да ещё в защищенном 32-битном режиме. Так вот было два сегмента - один для данных, другой для служебной информации. И мне было ну очень удобно выделять память данных с самого нуля. Тогда же я условился считать пустым указателем 0xFFFFFFFF. Ну и с тех пор пытаюсь даже на СИ не путать указатели с числами и использовать NULL. Короче, смысл в этом есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...