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

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用于比较两个类型是否相同,我们会在后面 一节中详细讨论。

http://www.xdnf.cn/news/9857.html

相关文章:

  • 【Python办公】将Excel表格转json(字典)数据-可自定义key和value
  • TeleAI发布TeleChat2.5及T1正式版,双双开源上线魔乐社区!
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题
  • ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
  • 玛哈特校平机:金属板材加工的精整专家
  • 记一次 Starrocks be 内存异常宕机
  • Ubuntu20.04操作系统ssh开启oot账户登录
  • 大数据学习(125)-hive数据分析
  • HOW - 简历和求职面试宝典(七)
  • 整数加减法测试题
  • API网关和API管理的区别
  • 【PCB工艺】绘制原理图 + PCB设计大纲:最小核心板STM32F103ZET6
  • Day39
  • remote: error: hook declined to update refs/heads.....
  • DrissionPage ChromiumPage模式:浏览器自动化的高效利器
  • 【PhysUnits】15.1 引入P1后的加一特质(add1.rs)
  • DeepSeekMath:突破开放式语言模型中数学推理能力的极限
  • 百度之星2024 初赛第一场 补给
  • 一键提取Office内图片的工具
  • MySQL 数据库调优指南:提升性能的全面策略
  • 【第4章 图像与视频】4.4 离屏 canvas
  • 前端开源JavaScrip库
  • uniapp+ts模拟popup弹出框(下拉框)
  • 【Kubernetes】ubuntu20.04通过kubeadm + Docker安装k8s
  • 进程间通信(共享内存)
  • Maven 仓库类型与镜像策略
  • aws instance store 的恢复
  • 【仿生系统】爱丽丝的“内在”或“灵魂”:概念与形式
  • C语言进阶--字符串+内存函数
  • R语言在生物群落数据统计分析与绘图中的实践应用