当前位置: 首页 > news >正文

C++17常量

        nullptr出现的目的是为了替代NULL。在某种意义上来说,传统会把NULL,0视为同一种东 西,这取决于编译器如何定义NULL,有些编译器会将定义为((void*)0),有些则会直接将其定义 为0。 

        C++不允许直接将void*隐式转换到其他类型。但如果编译器尝试把NULL定义为((void*)0), 那么在下面这句代码中: 

char *ch = NULL;

        没有了void*隐式转换的C++只好将定义为0。而这依然会产生新的问题,将NULL定义成0,将导致C++中重载特性发生混乱。考虑下面这两个函数: 

void foo(char*);

void foo(int);

        那么foo(NULL)这个语句将会去调用foo(int),从而导致代码违反直觉。 

        为了解决这个问题,C++引入了关键字nullptr,专门用来区分空指针、0。而nullptr的类型 为nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。 你可以尝试使用clang++编译下面的代码:

#include <iostream>#include <type_traits>//*******1. nullptr******/
// C++17 引入了 std::nullptr_t 类型,它是一个空指针类型。
// 在 C++ 中,NULL 是一个宏,通常定义为 0 或 (void*)0。 
/*int main(){if(std::is_same<decltype(NULL), decltype(0)>::value){std::cout << "NULL is the same type as 0" << std::endl;}else{std::cout << "NULL is NOT the same type as 0" << std::endl;//NULL 和 0 在 C++ 中是不同的类型。}if(std::is_same<decltype(NULL), decltype((void*)0)>::value){std::cout << "NULL is the same type as (void*)0" << std::endl;}else{std::cout << "NULL is NOT the same type as (void*)0" << std::endl;//NULL 和 (void*)0 在 C++ 中是不同的类型。}if(std::is_same<decltype(NULL), std::nullptr_t>::value){std::cout << "NULL is the same type as std::nullptr_t" << std::endl;}else{std::cout << "NULL is NOT the same type as std::nullptr_t" << std::endl;//NULL 和 std::nullptr_t 在 C++ 中是不同的类型。}return 0;
}
*/

        从输出中我们可以看出,NULL不同于与nullptr,0。所以,请养成直接使用的习惯。 此外,在上面的代码中,我们使用了decltype和std::is_same这两个属于现代C++的语法,简 单来说decltype用于类型推导,而std::is_same用于比较两个类型是否相同,我们会在后面 一节中详细讨论。

相关文章:

  • 据传苹果将在WWDC上发布iOS 26 而不是iOS 19
  • 【C++高级主题】命令空间(三):未命名的命名空间
  • TI dsp FSI (快速串行接口)
  • WPF【11_10】WPF实战-重构与美化(配置Material UI框架)
  • Unity3D仿星露谷物语开发55之保存游戏到文件
  • 【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​
  • 深入理解C#中的LINQ:数据查询的终极利器
  • 人工智能100问☞第36问:什么是BERT?
  • 销讯通CRM——大健康行业CRM解决方案
  • Typescript学习教程,从入门到精通,TypeScript 泛型与类型操作详解(二)(17)
  • Unity开发之Webgl自动更新程序包
  • 华为OD机试真题——矩形相交的面积(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 线性代数入门:轻松理解二阶与三阶行列式的定义与理解
  • 【课堂笔记】EM算法
  • 华为OD机试真题——AI面板识别(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Windows MongoDB C++驱动安装
  • JavaScript性能优化实战技术文章大纲
  • 【计算机网络】第2章:应用层—Web and HTTP
  • MySQL、PostgreSQL、Oracle 区别详解
  • 重新测试deepseek Jakarta EE 10编程能力
  • 有什么好的网站做旅行计划/安卓手机优化
  • 网站建设英文怎么写/新郑网络推广外包
  • 外贸b2c电子商务网站/友情链接的检查方法
  • 太原网站seo/谷歌google官网下载
  • 北京的软件公司/seo怎么优化方案
  • 建立网站的技术/搜索引擎优化的基本手段