The using
关键字用于定义类型别名。您的教授使用它的原因是:
可读性和描述性
您可以使用类型别名在语义上(仅此而已)限制特定类型,使名称对特定用途更具描述性。
一个例子是:
using fileName = std::string;
The fileName
别名用于描述文件名字符串,而不仅仅是任何字符串。这也使得函数签名变得可读。
我觉得我必须再次重申:这只是一个别名。任意函数取fileName
作为一个论点可以很好地适用于任何std::string
争论。
不必要typename
s
有些可能看起来没有必要,例如:
using setOfPaths = std::set<filePath>;
但在某些情况下,它们实际上可以用来避免指定typename
在以下情况下:
template<typename Type>
struct something {
using something_iter = typename std::set<Type>::iterator;
};
with:
template<typename Container>
using itertype = typename Container::iterator;
template<typename Type>
struct something {
using something_iter = itertype<std::set<Type>>;
};
通过移动typename
在特定的别名中我们可以重用itertype
在其他多个场合有效避免typename
.
注释typedef
还有另一种定义类型别名的方法:typedef
。该关键字是从 C 继承的,不允许使用模板化别名,例如:
template<typename Type>
using vec = std::vector<Type>;
关于类型安全的注意事项
这实际上并不比根本不使用别名更安全。再次,fileName
and std::string
是完全相同的类型。您可以互换使用两者。
下一步可能是定义一个具体的fileName
具有自己特定不变量的类/结构类型。