当前位置: 首页 > 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.lryc.cn/news/584702.html

相关文章:

  • MiniGPT4源码拆解——models
  • vscode和插件用法
  • imx6ull-裸机学习实验17——SPI 实验
  • 【会员专享数据】2013-2024年我国省市县三级逐年SO₂数值数据(Shp/Excel格式)
  • Jaspersoft Studio-6.4.0 TextField内容展示不全
  • 【大模型推理论文阅读】 Thinking Tokens are Information Peaks in LLM Reasoning
  • 设计模式的六大设计原则
  • vue3 element plus table 使用固定列,滑动滚动会错位、固定列层级异常、滑动后固定列的内容看不到了
  • 二刷 黑马点评 短信登陆功能
  • MatrixOne Intelligence v3.3 正式发布:结构化、自动化、可视化三重进化
  • 告别繁琐:API全生命周期管理的新范式——apiSQL
  • Android 网络开发核心知识点
  • 鸿蒙智行6月交付新车52747辆 单日交付量3651辆
  • android studio 运行,偶然会导致死机,设置Memory Settings尝试解决
  • OneFileLLM:一键聚合多源信息流
  • Logback日志框架配置实战指南
  • 浏览器 实时监听音量 实时语音识别 vue js
  • [特殊字符] ROM 和 RAM 知识点系统总结
  • C++中的左值、右值与std::move()
  • selenium中find_element()用法进行元素定位
  • 实时风险监控系统工具设计原理:2025异常检测算法与自动化响应机制
  • QT解析文本框数据——详解
  • 重新配置电脑中的环境变量
  • 安装VMware详细步骤
  • CIEDE2000 色差公式C++及MATLAB实现
  • Ansible:强大的自动部署工具
  • 国内如何考取Oracle大师
  • 解决问题的“测地线”:关于第一性原理与其他系统思考框架
  • HTTP 错误 500.19 - 打开 IIS 网页时出现内部服务器错误
  • 学习软件测试的第十四天(移动端)