|
3 / 3 / 0
Регистрация: 15.01.2012
Сообщений: 67
|
|
Что использовать с указателями? 0, NULL, nullptr?16.08.2012, 21:50. Показов 50522. Ответов 34
Метки нет (Все метки)
NULL в WinDef.h описан как #define NULL 0. То есть в случае использования как с указателями, так и другими переменными разницы 0. Про nullptr только час назад узнал, даёт ли он какие-либо реальные преимущества?
Но, вообщем-то, главный вопрос: что использовать?
0
|
|
| 16.08.2012, 21:50 | |
|
Ответы с готовыми решениями:
34
Разница между NULL, nullptr и 0
Стоит ли использовать null ? |
|
|
||||||
| 16.08.2012, 22:20 | ||||||
|
Самое банальное
5
|
||||||
|
21 / 21 / 1
Регистрация: 06.07.2012
Сообщений: 88
|
|
| 16.08.2012, 23:14 | |
Сообщение было отмечено как решение
Решение
Rengen, для обнуление указателя лучше использовать nullptr, т.к.:
"Причина введения nullptr в язык С++ заключается в устранение возможных недоразумений между литералом 0 как целочисленным значением и указателем. Двойное значение литерала 0 может вызывать проблемы при некоторых обстоятельствах. Литерал nullptr имеет тип std::nullptr_t, и его нельзя перепутать со значением другого типа. Он может быть неявно преобразован в любой ссылочный тип, но ни в один целочисленный тип, кроме типа bool." - Айвор Хортон, Visual C++ 2010, Глава 4 *примечание.
7
|
|
|
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
|
||||||
| 16.08.2012, 23:42 | ||||||
|
nullptr рекомендуют использовать в C++11
Добавлено через 3 минуты
0
|
||||||
|
54 / 48 / 4
Регистрация: 02.08.2012
Сообщений: 127
|
||||||
| 17.08.2012, 01:20 | ||||||
|
по идее, nullptr=NULL=0, но nullptr лучше передавать вместо 0/NULL в функцию если нужно указатель, а проверить указатель можно так:
0
|
||||||
|
3 / 3 / 0
Регистрация: 15.01.2012
Сообщений: 67
|
|
| 19.08.2012, 13:52 [ТС] | |
|
То есть, опять, что использовать решать мне. Всем спасибо.
0
|
|
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
| 19.08.2012, 15:42 | ||||||
Сообщение было отмечено как решение
Решение
Для C++ более старых версий nullptr легко добавляется одной строчкой:
9
|
||||||
|
|
|||
| 19.08.2012, 15:45 | |||
|
Добавлено через 2 минуты Nick Alte, еще каст в bool добавить надо бы для полной совместимости.
0
|
|||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||||||
| 19.08.2012, 15:58 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 15
|
|
| 19.08.2012, 16:52 | |
|
Все проще, лучше использовать стандартный 0 или nullptr, потому что NULL - это макрос компилятора, и он может иметь значение, отличное от 0 - мало что взбредет в голову разработчику компилятора
![]() или на крайний случай: const short NULL = 0;
0
|
|
|
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 15
|
||
| 19.08.2012, 17:05 | ||
|
Страуструп описывал про макрос NULL:
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 19.08.2012, 17:07 | |
|
0
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||
| 19.08.2012, 17:09 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.01.2012
Сообщений: 15
|
||||||
| 19.08.2012, 17:11 | ||||||
|
я юзаю minGW Qt:
компилятор, конечно, предупредил, но позволил компилить я к тому что, что надежнее не писать NULL, а использовать 0
0
|
||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||||||||||||||||
| 19.08.2012, 17:28 | |||||||||||||||||
![]()
header.h:
Так что (в отсутствие nullptr) использовать NULL в качестве «константы» нулевого указателя не менее надежно, чем использовать константы или классы ![]() Добавлено через 3 минуты Кстати, в отличие от твоего примера ни один из моих не выдал
2
|
|||||||||||||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 19.08.2012, 17:34 | |
|
Уже ж сказано, что на NULL и 0 жалуются не по той причине, что NULL можно заменить или что-то ещё, а из-за автоприведения типов в Си++, которое иногда (неочевидным образом) может приводить ваш 0 или NULL (который заменяется на 0) к целому числу и вызывать косяки (тривиальный пример вон в третьем посте).
А эти очевидные грабли с #define NULL 42 — ну, это вы сами себе в ногу стреляете; разработчики языка не обязаны нянчиться с вами. Считайте это — отсутствие токена «невалидный указатель», который обозначает только это, — первородным грехом дизайна языка.
1
|
|
| 19.08.2012, 17:34 | |
|
Помогаю со студенческими работами здесь
20
Значение Null в datagridview вызывает исключение. Не получается использовать Try-Catch Можно ли вместо предиката null использовать предикат (eql l nil)? Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями Зачем в качестве параметра передавать null и потом использовать его как массив? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|