using和typedef的区别
时间: 2023-08-31 15:06:20 浏览: 93
`using` 和 `typedef` 都可以用于定义类型别名,但是它们有以下不同点:
1. `using` 可以定义模板别名,而 `typedef` 不行。例如:
```
template <typename T>
using Vec = std::vector<T>;
```
2. `using` 可以定义模板的别名,而 `typedef` 不能。例如:
```
template <typename T>
using MyMap = std::map<T, std::string>;
```
3. `using` 可以定义模板函数的别名,而 `typedef` 不能。例如:
```
template <typename T>
using MyFunc = void (*)(T);
```
4. `using` 可以定义变量别名,而 `typedef` 不能。例如:
```
int i = 42;
using myInt = int&;
myInt j = i;
j = 43;
std::cout << i << std::endl; // 输出 43
```
5. `using` 更加直观和易读,可以避免一些 `typedef` 可能会带来的语义歧义问题。例如:
```
using MyInt = int*;
typedef int* MyIntPtr;
```
在使用 `MyInt` 时,我们可以直接写 `MyInt p`,但是在使用 `MyIntPtr` 时,我们需要写 `MyIntPtr p` 或者 `int* p`。
总之,虽然 `using` 和 `typedef` 都可以用于定义类型别名,但是 `using` 更加灵活和易读,可以优先考虑使用。
阅读全文