Определяется ли NULL как nullptr в C ++ 11? - PullRequest
19 голосов
/ 26 августа 2011

Будут ли реализации C ++ 11 определять NULL как nullptr?

Будет ли это предписано новым стандартом C ++?

Ответы [ 3 ]

17 голосов
/ 26 августа 2011

Изо рта лошади

C.3.2.4 Макрос NULL [diff.null]

1 / МакросNULL, определенный в любом из <clocale>, <cstddef>, <cstdio>, <cstdlib>, <cstring>, <ctime> или <cwchar>, является определенной в реализации константой нулевого указателя C ++ в этом международном стандарте (18.2).

Каждая реализация должна предоставить свое собственное определение, gcc, если я правильно помню, определяет его в __nullptr, для которого она имеет специальные проверки (проверяет, что она не используется в арифметических контекстах).например).

Так что можно определить его как nullptr, вам придется проверить документацию вашего компилятора / стандартной библиотеки, чтобы увидеть, что было сделано.

9 голосов
/ 26 августа 2011

Нет, NULL все тот же, что и раньше. Слишком много людей использовали макрос NULL неожиданным образом, переопределение его для nullptr привело бы к поломке большого количества кода.

Для уточнения: люди использовали NULL, например, для многих типов дескрипторов typedef. Если реальный тип, стоящий за таким typedef, не является указателем, определение NULL как nullptr было бы проблемой. Кроме того, кажется, что некоторые люди действительно использовали NULL для инициализации числовых типов.

По крайней мере, это то, что Microsoft нашла, когда они добавили nullptr в MSVC10, и почему они решили сохранить NULL, как это было всегда. Другие компиляторы могут выбрать другой путь, но я не думаю, что они это сделают.

1 голос
/ 26 августа 2011

FDIS будущего стандарта C ++ 11, целочисленное выражение все еще является нулевым указателем постоянная. Макрос NULL все еще определяется реализацией, но должен быть нулевым константа указателя. Таким образом, на практике это означает, что это хорошо, как 0 или может быть nullptr.

Ваш код, который использовал 0 или NULL, будет работать так же, как и раньше.

Читать подробности здесь .

...