| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Почему обращение к методу работает для nullptr ? |
| Автор: admsasha 21.9.2021, 14:41 | ||||
Есть вот такой код
Вывод
Проверял на https://www.onlinegdb.com/online_c++_compiler Почему??? |
| Автор: _zorn_ 22.9.2021, 16:39 | ||
| И правда дичь какая то. Более того если заменить присваивание на что то вроде
оно так же отработает. Какие то внутренние "оптимизации" наверное. Видимо НАВЯЗЧИВОЕ выпрямление дробовика направленного в ногу. Скорей всего зависит от компилятора (g++ выпрямляет) PS. А кто то еще php ругает ) |
| Автор: _zorn_ 22.9.2021, 18:47 |
| https://medium.com/@7zorn7/you-never-know-result-of-c-program-cd41e11c7207 |
| Автор: xvr 22.9.2021, 19:57 |
А почему бы и нет? Внутри get() значение this будет nullptr. Но так он и не используется - всё ок Проблемы будут если вы полезете за данными класса или попытаетесь вызвать виртуальный метод - тогда всё навернётся |
| Автор: _zorn_ 25.9.2021, 11:36 |
| Нормальный человек ждет что `null->something` есть обращение к нулевому указателю и все должно упасть уже сейчас. Курильщики же считают нормальным, то что можно составить некорректную программу и она не будет падать Я сам курильщик (php), но даже там такой дичи нет. Если бы метод хотя бы статическим был, я бы еще понял. PS. Подсказать сколько "неуловимых" ошибок можно насобирать когда иногда приходит null ? А если "обычно" не падает ? |
| Автор: _zorn_ 1.10.2021, 19:29 |
Дело в том что в С это бы упало если бы там были классы и объекты. Обычное обращение к невыделенной памяти... Вы же имели ввиду C++ ? В С компилятор не станет выделять память в итоговом бинарнике, если ты указал что переменная должна равняться null без явного malloc и т.п. Это не UB, а тупая хрень. Нет ни new и ничего подобного. |
| Автор: _zorn_ 1.10.2021, 20:32 |
Ясно понятно. А если "случайно" ? |