我是靠谱客的博主 机灵麦片,最近开发中收集的这篇文章主要介绍C++98中的空值nullptr,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

平时我们所用的空值是:NULL;在传统的C头文件(stddef.h)中,可以看到如下代码:

#ifndef NULL 
#ifdef __cplusplus 
#define NULL    0 
#else #define NULL    ((void *)0) 
#endif 
#endif 

NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。

下面就会引起一个问题:

void f(int) {  cout<<"f(int)"<<endl; } 
 
void f(int*) {  cout<<"f(int*)"<<endl; } 
 
int main() {  
    f(0);  
    f(NULL);  
    f((int*)NULL);  
    return 0; 
}

程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0或者(void*)类型的函数,因此与程序的初衷相悖。

实际是按0编译的;编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0

为了考虑兼容性,C++11给出了全新的nullptr表示空值指针。:为了避免混淆,C++11提供了nullptr, 即:nullptr代表一个指针空值常量。nullptr是有类型的,其类型为nullptr_t,仅仅可以被隐式转化为指针类型,nullptr_t被定义在头文件中:typedef decltype(nullptr) nullptr_t; 

注意:

  • 1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入的。
  • 2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。

最后

以上就是机灵麦片为你收集整理的C++98中的空值nullptr的全部内容,希望文章能够帮你解决C++98中的空值nullptr所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部