XZ Blog XZ Blog
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xzhouzeng

@渐行。
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 后端开发

    • cmake介绍
    • \{}统一初始化方
    • C++11新特性
    • C++标准推荐使用标准库头文件
    • C++动态内存分配和静态的区别
    • C++类函数后面加const的作用
    • C++类和结构区别
    • C++内存区域
    • nullptr与NULL
      • priority_queue使用
      • string , cstring , string h 的区别
      • using与typedef定义别名区别
      • vector中[]和at访问区别
      • 常量指针和指针常量
      • 空类大小及相关介绍
      • 容器emplace与push操作
      • 数据结构操作——时间复杂度
      • 智能指针(Smart Pointers)
      • 最大堆的实现
    • Git

    • 博客搭建

    • Debug

    • python开发

    • 技术
    • 后端开发
    xzhouzeng
    2023-03-20
    目录

    nullptr与NULL

    # nullptr与NULL

    Created: March 19, 2024 1:04 PM

    在C++中,nullptr是C++11引入的一个新的字面量,它代表空指针。它的类型是std::nullptr_t,可以转换成任何原生指针类型。使用**nullptr代替之前的NULL(通常被定义为0或((void*)0))的主要目的是消除一些由于NULL**本质上是整数导致的歧义和潜在的错误。

    # 歧义的解释

    在引入**nullptr之前,NULL被用来表示空指针。然而,因为NULL通常被定义为0**,所以它实际上是一个整数。这会导致在重载函数时出现歧义,特别是当一个函数接受整型参数,而另一个接受指针类型参数时。编译器可能无法确定调用哪个函数。

    cppCopy code
    void func(int x) {
        // ...
    }
    
    void func(int* ptr) {
        // ...
    }
    
    // 在调用时出现歧义
    func(NULL); // 调用者意图可能是调用func(int* ptr),但NULL实际上可以是整数0
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # nullptr解决了歧义

    nullptr的引入正是为了解决这种歧义。由于nullptr有自己的类型std::nullptr_t,编译器可以清楚地区分重载函数,确保调用正确。

    cppCopy code
    void func(int x) {
        // ...
    }
    
    void func(int* ptr) {
        // ...
    }
    
    // 使用nullptr,没有歧义
    func(nullptr); // 明确地调用 func(int* ptr)
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # nullptr与NULL的比较

    • **nullptr提供了类型安全,避免了NULL**可能引起的歧义和错误。
    • **nullptr**可以被隐式转换为任何指针类型,但不可以转换为整数类型,这进一步防止了误用。
    • 对于现代C++代码(C++11及之后版本),推荐使用**nullptr代替NULL**。

    综上所述,nullptr不等同于之前的NULL,而是一种更安全、更明确的空指针表示方式。

    编辑 (opens new window)
    C++内存区域
    priority_queue使用

    ← C++内存区域 priority_queue使用→

    最近更新
    01
    VideoLLMs
    03-20
    02
    Video2Script
    12-07
    03
    多模态
    11-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 xzhouzeng | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式