using用法整理
using
的极简新手教程,用最直白的语言和代码解释:
美图美图
一、核心作用:给类型起别名
目的:让复杂类型名变短、变好记。
例子:
// 原名:std::vector<std::string>
// 起个别名就叫 StringList
using StringList = std::vector<std::string>;// 使用
StringList names = {"Alice", "Bob"};
二、基础用法
1. 给简单类型起别名
using Age = int; // 把 int 叫 Age
Age myAge = 25;
2. 给复杂类型起别名
using Matrix = std::vector<std::vector<double>>; // 二维数组
Matrix data = {{1.1, 2.2}, {3.3, 4.4}};
3. 给函数指针起别名(新手难点!)
// 原函数类型:void(*)(int),指向参数为int、返回void的函数
using Callback = void(*)(int); // 起个别名叫 Callback// 使用
void print(int x) { std::cout << x; }
Callback func = print; // func 就是函数指针
func(10); // 调用 print(10)
三、using
vs typedef
(老方法)
功能相同,但 using
更直观!
// typedef 写法
typedef int Age;
typedef void(*Callback)(int);// using 写法(推荐!)
using Age = int;
using Callback = void(*)(int);
using
独有的超能力:给模板类型起别名
// 定义一个模板别名:任意类型的 pair
template<typename T>
using Pair = std::pair<T, T>;// 使用
Pair<int> point(1, 2); // 等价于 std::pair<int, int>
四、实际应用场景
-
简化长类型名
using FilePath = std::filesystem::path; FilePath p = "data.txt";
-
统一跨平台代码
#ifdef _WIN32 using Socket = SOCKET; // Windows 的 Socket 类型 #else using Socket = int; // Linux 的 Socket 类型 #endif
-
隐藏复杂实现
// 头文件中声明别名 using UserData = SomeComplicatedTemplateClass<int, std::string>;
五、一句话总结
using
= 给类型起外号,让代码更干净!
- 简单类型:
using 别名 = 原名;
- 函数指针:
using 别名 = 返回类型(*)(参数列表);
- 模板类型:
template<typename T> using 别名 = ...