区别参考 https://mp.csdn.net/console/article
using 的详细语法参考:https://skysys.blog.csdn.net/article/details/51953113
在普通的类型名定义时,理论上讲二者是没有区别的,标准上是这样说的:
A typedef-name can also be introduced by analias-declaration. The identifier following the using keyword becomes atypedef-name and the optional attribute-specifier-seq following the identifierappertains to that typedef-name. It has the same semantics as if it wereintroduced by the typedef specifier. In particular, it does not define a newtype and it shall not appear in the type-id
类似于#define和typedef,举例如下:
using WorkerProc= std::function<void(T*)>;
typedef std::function<void(T*)> WorkerProc;
上面也提到了,二者是等价的。
但也是有一些细微的区别的,从网上找了个例子
// type alias can introduce a member typedef name
template<typename T>
struct Container {
using value_type = T;
};
// which can be used in generic programming
template<typename Container>
void fn2(const Container& c)
{
typename Container::value_type n;
}
// 2016/08/25 补
int main()
{
Container<int> c;
fn2(c); // Container::value_type will be int in this function
return 0;
}
红色的部分显示的表明这是一个类型名,而不是一个静态成员变量,否则会误认为其是一个静态成员变量。这个在Effective C++和C++模板里也有说明。
细节很重要,但还是那句话,不要沉迷于细节。