首页 > 其他分享 >nullptr和nullptr_t有什么区别(深度理解)

nullptr和nullptr_t有什么区别(深度理解)

时间:2024-07-21 19:56:50浏览次数:11  
标签:std 区别 int void nullptr char 深度 类型

nullptrnullptr_t 是 C++11 引入的两个概念,它们之间有一些重要的区别。

nullptr

nullptr 是一个关键字,用来表示空指针常量。在 C++11 之前,NULL 被用来表示空指针,但由于 NULL 通常被定义为整数 0,可能会引发一些类型相关的问题。例如:

void f(int);
void f(char*);

f(NULL);  // 调用 f(int),而不是 f(char*),可能会产生歧义

为了解决这个问题,C++11 引入了 nullptrnullptr 是一种特殊的常量,表示空指针,其类型是 std::nullptr_t。使用 nullptr 可以避免上述类型歧义的问题:

void f(int);
void f(char*);

f(nullptr);  // 明确调用 f(char*)

nullptr_t

nullptr_t 是表示 nullptr 的类型的类型名。它是一个特殊的类型,可以用来声明和定义接受或返回 nullptr 的变量或函数。例如:

std::nullptr_t nptr;  // 声明一个 nullptr_t 类型的变量
nptr = nullptr;  // 赋值 nullptr 给这个变量

std::nullptr_t getNull() {
    return nullptr;
}

区别总结

  • nullptr 是一个表示空指针的关键字,其类型是 std::nullptr_t
  • std::nullptr_tnullptr 的类型。
    #include <iostream>
    #include <type_traits>
    
    void f(int) {
        std::cout << "f(int)" << std::endl;
    }
    
    void f(char*) {
        std::cout << "f(char*)" << std::endl;
    }
    
    int main() {
        std::nullptr_t nptr = nullptr;  // nullptr_t 类型的变量
        f(nullptr);  // 调用 f(char*)
        f(nptr);  // 也是调用 f(char*)
        
        // 输出类型信息
        std::cout << "Type of nullptr: " << typeid(nullptr).name() << std::endl;
        std::cout << "Type of nullptr_t: " << typeid(std::nullptr_t).name() << std::endl;
    
        return 0;
    }
    

    运行上述代码将输出:

    f(char*)
    f(char*)
    Type of nullptr: nullptr_t
    Type of nullptr_t: nullptr_t
    

    从输出中可以看出,nullptr 的类型是 std::nullptr_t

标签:std,区别,int,void,nullptr,char,深度,类型
From: https://blog.csdn.net/qq_44905692/article/details/140485803

相关文章

  • Instruction和Question的区别和联系
    Instruction和Question的区别和联系https://blog.csdn.net/qq_35082030/article/details/1307270163.Question和Instruction的区别问答(QA)和指令(Instruction)是人机交互中最常见的形式之一。QA是指一问一答的形式,通常是用户提问,模型给出回答。而Instruction则源自于PromptEngin......
  • 如何增加五边形不规则四面体的深度?
    我只有一点使用海龟的经验。形状无意中看起来像一种视错觉,这不是我想要的效果。我不知道最好的方法是什么。我想用阴影添加一些深度,但我不知道这是否可能。任何建议将不胜感激。importturtleimportmath#Setupscreen=turtle.Screen()screen.bgcolor("lightblue"......
  • 0、软中断与硬中断的区别
    一、硬中断由与系统相连的外设(比如网卡、硬盘)自动产生的,主要是用来通知操作系统系统外设状态的变化。可屏蔽中断——当CPU接收到更高优先级的中断时,这些中断可以被延迟。不可屏蔽中断——无法延迟这些中断。CPU应该立即考虑它们。二、软中断为了满足实时系统的要求,中断......
  • 08 ES6的for...of和for...in的区别
    在JavaScript中,for...in和for...of是两种不同的循环结构,它们分别在不同的ECMAScript版本中被引入,并且具有不同的用途和特性。for...in循环(ES5)for...in是ECMAScript5(ES5)中引入的,用于遍历对象的可枚举属性和数组的索引。它提供了一种方式来获取对象的键或数组的索引。......
  • 多线程同步利器:条件变量 Condition Variable 的深度解析
    ......
  • 多线程同步机制中 lock_guard 与 unique_lock 的使用区别
    ......
  • 深度学习印章检测(自动生成数据集+yolov5)
    目录1概述1.1简介1.2演示2软件安装3数据集3.1生成随机字符3.2生成印章图片3.3生成word文件3.4Word转PDF文件3.5PDF转图像4labelme标记5yolov5训练1概述本文将从代码层面的角度来剖析印章数据集如何自动生成,以及如何进行训练与测试,如果希望获取直......
  • ElasticSearch - match和term有什么区别
    match和term 查询是两种常用的查询方式,在用途和行为上有着显著的差异:1.match查询全文搜索:match查询用于全文搜索场景。它在查询之前对字段值和查询字符串进行分词(tokenization)处理。分析器(Analyzer)应用:match查询会应用字段指定的分析器(如果有的话)来处理查询字符串。这意......
  • 深度学习图解,第 1 部分:神经网络如何工作?神经网络的图解和直观介绍
            欢迎来到雲闪世界。神经网络是一种机器学习模型。这只是我计划撰写的关于深度学习的整个系列文章的第一篇。它将重点介绍一个简单的人工神经网络如何学习,并为您提供对神经网络如何逐个神经元构建的深入(哈哈,双关语)理解,这在我们继续构建这些知识时至关重......
  • 深度融合与创新:Open API技术促进AI服务生态构建
    引言在数字化转型的浪潮中,人工智能(AI)已从概念探索走向实际应用,深刻改变着各行各业。OpenAPI(开放应用程序接口)作为连接技术与业务的桥梁,正成为推动AI服务普及和生态构建的关键力量。本文将探讨OpenAPI技术如何通过标准化、易用性和灵活性,加速AI服务的集成与创新,构建一个更加......