在C+11中,类型胡枝子和使用有什么区别?

在C+11中,类型胡枝子和使用有什么区别?

我知道在C+11中我们现在可以使用using写入类型别名,如typedefs:

typedef int MyInt;

据我所知,相当于:

using MyInt = int;

这种新的语法来源于一种表达方式。“template typedef":

template< class T > using MyType = AnotherType< T, MyAllocatorType >;

但是,对于前两个非模板的例子,在标准中还有其他细微的差别吗?例如,typedefIt‘s以“弱”的方式进行混叠。也就是说,它不创建新类型,而只创建新名称(在这些名称之间隐式转换)。

是不是和using或者它会产生一种新的类型?有什么不同吗?


翻阅古今
浏览 416回答 3
3回答

心有法竹

这个使用在模板中使用语法具有优势。如果您需要类型抽象,但也需要保留模板参数,以便将来可以指定。你应该写这样的东西。template&nbsp;<typename&nbsp;T>&nbsp;struct&nbsp;whatever&nbsp;{};template&nbsp;<typename&nbsp;T>&nbsp;struct&nbsp;rebind{ &nbsp;&nbsp;typedef&nbsp;whatever<T>&nbsp;type;&nbsp;//&nbsp;to&nbsp;make&nbsp;it&nbsp;possible&nbsp;to&nbsp;substitue&nbsp;the&nbsp;whatever&nbsp;in&nbsp;future.};rebind<int>::type&nbsp;variable;template&nbsp;<typename&nbsp;U>&nbsp;struct&nbsp;bar&nbsp;{&nbsp;typename&nbsp;rebind<U>::type&nbsp;_var_member;&nbsp;}但使用语法简化了这个用例。template&nbsp;<typename&nbsp;T>&nbsp;using&nbsp;my_type&nbsp;=&nbsp;whatever<T>;my_type<int>&nbsp;variable;template&nbsp;<typename&nbsp;U>&nbsp;struct&nbsp;baz&nbsp;{&nbsp;my_type<U>&nbsp;_var_member;&nbsp;}

慕沐林林

它们本质上是一样的,但是using提供alias templates这是非常有用的。我能找到的一个很好的例子是:namespace&nbsp;std&nbsp;{ &nbsp;template<typename&nbsp;T>&nbsp;using&nbsp;add_const_t&nbsp;=&nbsp;typename&nbsp;add_const<T>::type;}所以,我们可以用std::add_const_t<T>而不是typename std::add_const<T>::type

呼啦一阵风

它们与标准相当(重点为地雷)(7.1.3.2):还可以通过别名声明引入tydurif名称。Using关键字后面的标识符变成tyduif-name,而标识符后面的可选属性-说明符-seq属于该ty胡枝子名。它具有相同的语义,就好像它是由tyHuif说明符引入的一样。特别是,它不定义新类型,并且它不应出现在类型id中。
打开App,查看更多内容
随时随地看视频慕课网APP