LINUX.ORG.RU

Страуструп не прав?


0

0

В шестой главе, 3-его издания "ЯП С++", натыкаюсь на такую странную фразу:

For a pointer p,
    if (p) // ...
is a direct statement of the test "does p point to a valid object"

А ведь сразу после объявления переменной, если p не глобальная или статическая, это утверждение не будет верным. Или я ошибаюсь?

Есть такое правило, переменные нужно инициализировать при обьявлении, хотябы нулем.

wfrr ★★☆
()

После объявления неинициализированной локальной p это выражение имеет неопределённое поведение.

Legioner ★★★★★
()

Ну, в общем, да, Вы правы. Если указатель не инициализировать, то в нем мусор. Но if(p) этого не знает. :)

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

Uncle_Theodore ★★
()

Утверждение верно всегда. Просто под points to valid object надо понимать "not null pointer". А ссылается ли указатель на что-то осмысленное, на посторонние данные или попадает в отсутствующую страницу - это уже твои проблемы, а не конструкции if(p), которая полностью эквивалентна if(p==NULL).

Речь лишь о том, что в языке C для указателей есть одно специальное значение - NULL. Все остальные для C - полноценные указатели.

alexsaa
()
Ответ на: комментарий от alexsaa


Каскадный жук приплыл в норвежский порт
Его рога торчали годы из пруда
Усатый дворник шпингалеты продавал
Открученные в гардеробных дома своего

Кормашрый стук по трубам кот производил
Его ушастый череп звон воспринимал
Но коготисточный брезгливый погреб под окном
Нежданно и негаданно на марки хлеб менял.

Сок брюквы по рублю в подвале продавал
Соседский двоечник Василий, разгильдяй
Разгильдия большого стоил год
Внештатный забугристый клёвый шпон в устах.

Твои уста припали к печени моей
Побереги косматый свой черёд
Каниструальный клёвоточеский союз
Мандат ростральный забастовкою грозил.

Степанидальный клавозверский правопис
Судебный пристав ел сыры и шоколады
Зубастый крокодайловый детгиз
Аванс не выдавал до первомая.

irc_007_1

anonymous
()
Ответ на: комментарий от alexsaa

>if(p), которая полностью эквивалентна if(p==NULL).

!=

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.