nullptr与NULL

NULL

  NULL can be defined as any null pointer constant. Thus existing code can retain definitions of NULL as 0 or 0L, but an implementation may also choose to define it as (void*)0. This latter form of definition is convenient on architectures where sizeof(void*) does not equal the size of any integer type. It has never been wise to use NULL in place of an arbitrary pointer as a function argument, however, since pointers to different types need not be the same size. The library avoids this problem by providing special macros for the arguments to signal, the one library function that might see a null function pointer.

nullptr

  A null pointer constant is an integer literal (2.13.2) with value zero or a prvalue of type std::nullptr_t.

  A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of object pointer or function pointer type. Such a conversion is called a null pointer conversion. Two null pointer values of the same type shall compare equal. The conversion of a null pointer constant to a pointer to cv-qualified type is a single conversion, and not the sequence of a pointer conversion followed by a qualification conversion (4.4). A null pointer constant of integral type can be converted to a prvalue of type std::nullptr_t. [ Note: The resulting prvalue is not a null pointer value. end note ]

  A prvalue of type pointer to cv T,” where T is an object type, can be converted to a prvalue of type pointer to cv void”. The result of converting a non-null pointer value of a pointer to object type to a pointer to cv void represents the address of the same byte in memory as the original pointer value. The null pointer value is converted to the null pointer value of the destination type.

  A prvalue of type pointer to cv D”, where D is a class type, can be converted to a prvalue of type pointer to cv B”, where B is a base class (Clause 10) of D. If B is an inaccessible (Clause 11) or ambiguous (10.2base class of D, a program that necessitates this conversion is ill-formed. The result of the conversion is a pointer to the base class subobject of the derived class object. The null pointer value is converted to the null pointer value of the destination type.

猜你喜欢

转载自www.cnblogs.com/tianzeng/p/11567069.html