我知道在C 11中我们现在可以使用 using
来写类型别名,比如 typedef
:
typedef int MyInt;
从我的理解来看,相当于:
using MyInt = int;
这种新语法来自于努力表达“ template typedef
”:
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
但是,对于前两个非模板示例,标准中是否还有其他细微差别?例如, typedef
以"weak"方式执行别名 . 也就是说,它不会创建新类型,只会创建一个新名称(这些名称之间隐含了转换) .
与 using
相同还是生成新类型?有什么不同吗?
4 回答
它们与标准(强调我的)(7.1.3.2)相同:
在模板中使用时, using 语法具有优势 . 如果需要类型抽象,还需要保留模板参数以便将来可以指定 . 你应该写这样的东西 .
但是 using 语法简化了这个用例 .
它们基本相同,除了:
它们本质上是相同的,但
using
提供了alias templates
,这非常有用 . 我能找到一个很好的例子如下:所以,我们可以使用
std::add_const_t<T>
而不是typename std::add_const<T>::type