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

【c++八股文】Day6:using和typedef

using 是 C++ 中非常重要且用途广泛的关键字,它的作用取决于使用场景,可以分为以下几大类:


✅ 一、using 的五大常见用途(你要重点掌握)

类别示例作用描述
1️⃣ 类型别名(替代 typedef)using i64 = long long;定义类型别名(比 typedef 更现代)
2️⃣ 继承成员暴露using Base::foo;把父类的同名函数或变量“引入”子类作用域
3️⃣ 模板别名using Vec = std::vector<T>为模板定义别名
4️⃣ 命名空间引入using std::cout;把命名空间中的名字引入当前作用域
5️⃣ 别名模板(C++11 起)template <typename T> using Ptr = T*;模板别名(不能用 typedef 实现)

📘 1. 类型别名(最常用)

✅ 写法:

using i64 = long long;  // 等价于 typedef long long i64;

✅ 现代 C++ 推荐使用 using 而非 typedef,因为:

  • using 更直观(左边是新名字)
  • 支持模板别名(typedef 不支持)

📘 2. 继承中引入父类成员(名字提升)

class Base {
public:void foo(int);
};class Derived : public Base {
public:using Base::foo;  // 否则会被隐藏void foo(double);
};

❗ 否则父类的 foo(int) 会被子类的 foo(double) 隐藏(名字隐藏规则)


📘 3. 模板类型别名(typedef 做不到)

template<typename T>
using Vec = std::vector<T>;  // 这样就可以写 Vec<int> 了Vec<int> a = {1, 2, 3};

这个是 using 相较于 typedef 最大的优势


📘 4. 引入命名空间中的符号(慎用)

using std::cout;
using std::endl;cout << "hello" << endl;

或者引入整个命名空间(⚠️面试中要小心):

using namespace std;  // 不推荐写在头文件中

📘 5. 别名模板函数指针、指针封装器等(高级用法)

template<typename T>
using Ptr = T*;Ptr<int> p = new int(5);  // 相当于 int* p

这是 typedef 无法实现的模板别名写法。


✅ 面试中推荐的表达方式

using 是现代 C++ 提供的统一机制,用于类型别名、命名引入、继承成员提升、模板别名等场景,相较于 typedef,它语义更清晰、功能更强,尤其是在模板编程中更具优势,是 C++11 之后推荐的写法。

http://www.dtcms.com/a/273242.html

相关文章:

  • [yolo-world]YOLO-World数据集介绍及标注格式详解
  • SoC程序如何使用单例模式运行
  • 什么是 MIT License?核心要点解析
  • [数据结构与算法] 优先队列 | 最小堆 C++
  • 几种LLM推理加速技术的区别
  • 列表页与详情页的智能识别:多维度判定方法与工业级实现
  • 海光芯赋能:国产化高性能计算平台,重塑边缘与工业智能新算力
  • 使用虚拟机远程登陆ensp模拟器交换机
  • ROS1学习第二弹
  • 1 C++提高——模板
  • H5微应用四端调试工具—网页版:深入解析与使用指南
  • FS-TAS如何提升电催化反应的效率-测试GO
  • 人大金仓下载安装教程总结
  • 区块链基础知识:从比特币到区块链的全面解析
  • 复杂度简介
  • Android-jetpack之DataBinding实战应用
  • NMEA-0183 协议 GPS 介绍
  • Redis-集群Cluster
  • Python练习(1)Python基础类型操作语法实战:20道实战题解与案例分析(上)
  • 《一起出发,“春”不“晚”》特别行动踏梦武当,探寻新春奇境
  • 教育领域AI教师培训计划及相关行业动态的综合简报
  • CVPR2022——RepLKNet模型有效感受野的热图可视化
  • Java Stream流:高效数据处理全解析
  • RV1126平台(Buildroot Linux)+ SunplusIT SPCA2688 USB摄像头 RTSP推流全流程复盘与问题解决记录
  • LabelImg标注工具详解与使用教程
  • SQL进阶:自连接的用法
  • 数字电子时钟——数字电路课设
  • 存在两个cuda环境,在conda中切换到另一个
  • vue3中ref和reactive的使用、优化
  • ABP vNext + OpenIddict:多租户授权中心