使用-声明现有名称空间类型与创建类型别名

Bap*_*tou 5 c++ typedef using-declaration type-alias

这不是关于类型别名之间using以及typedef创建类型别名之间的区别的问题。我想提供从代码块或函数内部的名称空间访问现有类型的权限。

我发现了两种不同的方式:

我可以使用using声明“包含”类型:

using typename mynamespace::mytype;
Run Code Online (Sandbox Code Playgroud)

或者我可以创建一个类型别名:

typedef mynamespace::mytype mytype;
using mytype = mynamespace::mytype; //C++11
Run Code Online (Sandbox Code Playgroud)
  1. 有什么区别吗?
  2. 每种语法的优缺点是什么?
  3. 哪个是最常用/推荐的?

谢谢。

相关问题:使用基类中的现有类型声明与在子类中创建类型别名

Sto*_*ica 5

有什么区别吗?

名称空间中名称的类型别名可以出现在类中

struct S { using mytype = mynamespace::mytype; };
Run Code Online (Sandbox Code Playgroud)

而使用声明可能不会。

每种语法的优缺点是什么?

如果要处理类范围,上一点是一个很大的缺点。

除此之外,这两种方法非常相似。别名是一个新名称,完全代表别名的类型。虽然using声明将类型的现有名称纳入范围。如果mytype两者都使用,则不会有任何区别。

哪个是最常用/推荐的?

我对此是否达成共识表示怀疑。在必须使用时(类别范围)使用您必须使用的一种,否则,请遵循团队的风格指南。