NULL
De cppreference.com
Definido en el archivo de encabezado <clocale> | ||
Definido en el archivo de encabezado <cstddef> | ||
Definido en el archivo de encabezado <cstdio> | ||
Definido en el archivo de encabezado <cstdlib> | ||
Definido en el archivo de encabezado <cstring> | ||
Definido en el archivo de encabezado <ctime> | ||
Definido en el archivo de encabezado <cwchar> | ||
#define NULL /*definido por la implementación*/ | ||
La macro NULL
es una constante de puntero nulo definida por la implementación, que puede ser
una expresión constante integral rvalue de tipo entero que se evalúa a cero | (hasta C++11) |
un literal entero con valor cero, o un prvalue de tipo std::nullptr_t | (desde C++11) |
Una constante de puntero nulo puede ser convertida implícitamente a cualquier tipo de puntero. Tal conversión resulta en el valor de puntero nulo de ese tipo. Si una constante de puntero nulo tiene tipo entero, puede convertirse a un prvalue de tipo std::nullptr_t.
Contenido |
[editar]Implementación posible
#define NULL 0//desde C++11#define NULL nullptr |
[editar]Notas
En C, la macro NULL
puede tener el tipo void*
, pero eso no se permite en C++.
[editar]Ejemplo
Ejecuta este código
#include <cstddef>#include <type_traits>#include <iostream>class S;int main(){int* p = NULL;int* p2 =static_cast<std::nullptr_t>(NULL);void(*f)(int)= NULL;int S::*mp = NULL;void(S::*mfp)(int)= NULL; if(std::is_same_v<decltype(NULL), std::nullptr_t>){std::cout<<"NULL implementado con tipo std::nullptr_t\n";}else{std::cout<<"NULL implementado usando un tipo integral\n";}}
Posible salida:
NULL implementado usando un tipo integral
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
CWG 903 | C++11 | Las expresiones constantes con valor cero, tal como 1-1, se permitían. | Solamente se permite el literal cero. |
[editar]Véase también
nullptr | El literal de puntero que especifica un valor de puntero nulo. (C++11) |
(C++11) | El tipo del literal nullptr. (typedef) |
Documentación de C para NULL |