C++的nullptr

05-28 1955阅读

nullptr

  • 前言
  • 一、指针空值NULL
  • 二、指针空值nullptr(C++11)
    • C++98中的指针空值
    • 三、NULL与nullptr的区别
    • 总结

      前言

      推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。

      C++的nullptr
      (图片来源网络,侵删)

      https://www.captainbed.cn/f1

      nullptr是C++11引入的一个新特性,用于表示空指针。它提供了一种类型安全的方式来区分空指针和非空指针,避免了传统空指针(如NULL或0)可能导致的类型不匹配问题。使用nullptr可以提高代码的可读性和安全性。同时,nullptr还可以与C++的智能指针(如std::unique_ptr、std::shared_ptr等)一起使用,更好地管理动态分配的内存。


      一、指针空值NULL

      指针空值NULL是一种特殊的指针值,表示指针不指向任何有效的内存地址。在C和C++中,可以使用NULL宏定义表示空指针。当使用NULL赋值给一个指针时,表示该指针不指向任何内存地址。

      使用空指针可以用于以下情况:

      1. 初始化指针变量,避免野指针的问题。
      2. 在条件判断中判断指针是否为空。
      3. 作为函数的返回值,表示函数执行失败或者没有有效的返回值。

      需要注意的是,访问空指针会导致程序崩溃或者产生未定义的行为,因此在使用指针之前,应该先判断指针是否为空。可以使用条件语句或者断言来判断指针是否为空。

      二、指针空值nullptr(C++11)

      指针空值nullptr是C++11引入的一种特殊的空指针常量。在以前的C++标准中,常用的空指针常量是NULL,它通常被定义为整数0或者(void*)0。然而,这样的定义可能会引起一些类型转换的问题,因为整数0可能会被隐式地转换为其他类型的指针,从而导致一些意想不到的错误。

      为了解决这个问题,C++11引入了新的空指针常量nullptr。nullptr是一个特殊的关键字,它的类型是std::nullptr_t,表示一个空指针常量。使用nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,而不能被转换为整数类型。

      C++98中的指针空值

      在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化:

      void TestPtr()
      {
       	int* p1 = NULL;
      	int* p2 = 0;
       
       // ……
      }
      

      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
       	cout
       	f(0);
       	f(NULL);
       	f((int*)NULL);
       	return 0;
      }
      
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]