Nп/п : 64 из 100
 От   : Telegram Channels Robot             2:5055/182        15 сен 23 15:26:34
 К    : All                                                   15 сен 23 18:32:02
 Тема : [](https://telegra.ph/file/4362b1167304cf5cdbfc2.jpg)**Трудно быть н...
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 2:5055/182 50361b81
@PID: jNode ver. 1.5
@TID: jNode ver. 1.5
@CHRS: CP866 2
 [](https://telegra.ph/file/4362b1167304cf5cdbfc2.jpg)**Трудно быть
натуралом, благородные доны**

 [То, что тут объясняет дон Румата, требует некоторого дополнительного
пояснения.](https://habr.com/ru/companies/pvs-studio/articles/760514/)

Это имеет исторические причины, о которых чуть позже.

 Пока же просто примите как данность, что в Сишечке и крестах
действует джентльменское соглашение, что любой тип, имеющий инициализированное
либо присвоенное значение в логическом выражении расценивается как
эквивалент true. А нуль, либо __неинициаизированный указатель с мусором__,
соответственно, как false.

 А вот писать if (x == nullptr) семантически неверно и вводит в
заблуждение. Так как nullptr (он же ноль) не обязательно равен нулю. А может
быть произвольным мусором в памяти. И использовать его в выражении
строгого равенства, вообще говоря, некорректно.

 Возвращаясь к историческим причинам. Как вы, возможно, знаете, bool -
это байт. unsigned char. Если он true - там все единицы. Если false -
нули во всех разрядах. Сделано это было для надежности, а также по
причине того, что это минимальная единица хранения. Отдельными битами, увы,
мы можем оперировать лишь с выкрутасами посредством bitwise-операций.

Соответственно, если в байте хотя бы один бит единица - он трактуется как true.

 И проверять наличие или отсутствие осмысленного значения в булевских
выражениях вполне себе корректно и понятно. А вот строгое равенство, с учетом
существования указателей - увы, семантически неверно.

 Finally. NULL (nullptr) не следует считать нулем, пустым значением
либо чем-то осмысленным. По смыслу это __неопределенное значение__. N/A.
Мусор в памяти. Так более верно. А вот если оно инициализировано -
смотрим, а не ноль ли оно. Компилятор различает эти тонкости и генерирует
правильно себя ведущий код. Мне неизвестны случаи, когда в таких проверках
возникало бы UB.
http://fido.ortoped.org.ru/photo_2023-09-15_15-22-48.jpg

--- hssergey station
 * Origin: jNode ver. 1.5 (2:5055/182)
SEEN-BY: 301/1 460/58 4500/1 5001/100 5005/49
5015/255 5019/40 5020/715 848
SEEN-BY: 5020/1042 4441 12000 5030/49 1081 5055/182
5058/104 5061/133
SEEN-BY: 5083/444
@PATH: 5055/182 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх