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
    目录

    using与typedef定义别名区别

    # using与typedef定义别名区别

    Created: March 19, 2024 1:20 PM

    提到类型别名(Type Aliases)时,C++提供了两种主要方式来定义别名:传统的**typedef和C++11引入的using**声明。虽然它们都用于相同的目的——为类型提供一个新的名字,但在语法和某些用法上有所不同。

    # typedef的用法

    **typedef是传统的类型别名定义方式,它在C语言中就已经存在,并被C++继承。typedef**可以用于给复杂的类型定义一个更简短、更易读的名字。

    cppCopy code
    typedef unsigned long ulong;
    typedef void (*FuncPtr)(int, int);
    
    
    1
    2
    3
    4

    # using声明的用法

    C++11引入了基于**using**的类型别名声明,它提供了一种更现代、更灵活的方式来定义类型别名,尤其是对于模板类型别名。

    cppCopy code
    using ulong = unsigned long;
    using FuncPtr = void (*)(int, int);
    
    
    1
    2
    3
    4

    # 区别和优点

    虽然对于非模板类型别名,**typedef和using声明在功能上几乎相同,但using**声明有几个优点:

    1. 一致性:**using**声明的语法与C++中的其他赋值和类型推导更加一致,使得代码更易读和理解。
    2. 模板别名:**using**声明支持模板,使得可以为模板应用别名,这对于定义复杂的模板类型特别有用。
    cppCopy code
    template <typename T>
    using Ptr = T*;
    
    
    1
    2
    3
    4
    1. 可读性:对于复杂的类型定义,**using**声明通常提供了更好的可读性。

    # 示例:模板别名

    **using**声明特别适用于模板类型别名,下面是一个示例,展示了如何为模板类型定义别名:

    cppCopy code
    template <typename T>
    using Vec = std::vector<T>;
    
    Vec<int> vec; // 等同于 std::vector<int> vec;
    
    
    1
    2
    3
    4
    5
    6

    # 总结

    虽然**typedef和基于using的类型别名在许多情况下都可以使用,但using声明提供了更大的灵活性和一致性,尤其是在处理模板时。因此,对于新的代码库或C++11及以上版本,推荐优先使用using**声明来定义类型别名。

    编辑 (opens new window)
    string , cstring , string h 的区别
    vector中[]和at访问区别

    ← string , cstring , string h 的区别 vector中[]和at访问区别→

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