这不是关于using
和typedef
语句之间的区别的问题。我想提供从代码块或函数内部的名称空间访问现有类型的权限。我发现了两种不同的方式:
我可以“包括”类型:
using typename mynamespace::mytype;
或者我可以创建一个别名:
typedef mynamespace::mytype mytype;
using mytype = mynamespace::mytype; //C++11
有什么区别吗?
类型别名可以出现在班级中
struct S { using mytype = mynamespace::mytype; };
虽然可能没有使用声明。
每种语法的优缺点是什么?
如果要处理类范围,上一点是很大的缺点。
除了这两种方法非常相似。别名是一个新名称,完全代表别名的类型。虽然using声明将类型的现有名称纳入范围。如果同时使用mytype
,则不会有任何区别。
哪个是最常用/推荐的?
我怀疑是否对此达成共识。在必须使用时,使用必需的内容(类作用域),否则,请遵循团队的风格指南。