Avatar ·

C++中typedef和using的区别是什么?何时使用哪个?

大家好!我最近开始学习C++,遇到了两种创建类型别名的方法:老式的`typedef`和C++11中引入的新式`using`(或称为别名声明)。 我理解它们似乎做的是同一件事。例如,我可以写: ```cpp typedef unsigned long long ULL; using ULL = unsigned long long; ``` 看起来没什么区别。但我听说`using`更酷,在现代代码中推荐使用。为什么?真正的区别在哪里?有没有`typedef`不行而`using`可以的情况?或者反过来? 我特别关心复杂情况:函数指针、模板、嵌套类型。我尝试用`typedef`为模板类创建别名,但没有成功。可能是我做错了什么。 下面是一个让我困惑的例子: ```cpp // 这样能行吗? template typedef std::vector Vec; // 编译错误! // 那这个呢? template using Vec = std::vector