为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
翻阅古今 2019-06-29 14:48:58
在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或者它会产生一种新的类型?有什么不同吗?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

这个使用在模板中使用语法具有优势。如果您需要类型抽象,但也需要保留模板参数,以便将来可以指定。你应该写这样的东西。

template <typename T> struct whatever {};template <typename T> struct rebind{
  typedef whatever<T> type; // to make it possible to substitue the whatever in future.};rebind<int>::type variable;template <typename U> struct bar { typename rebind<U>::type _var_member; }

使用语法简化了这个用例。

template <typename T> using my_type = whatever<T>;my_type<int> variable;template <typename U> struct baz { my_type<U> _var_member; }


查看完整回答
反对 回复 2019-06-29
?
慕沐林林

TA贡献2016条经验 获得超9个赞

它们本质上是一样的,但是using提供alias templates这是非常有用的。我能找到的一个很好的例子是:

namespace std {
 template<typename T> using add_const_t = typename add_const<T>::type;}

所以,我们可以用std::add_const_t<T>而不是typename std::add_const<T>::type


查看完整回答
反对 回复 2019-06-29
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

它们与标准相当(重点为地雷)(7.1.3.2):

还可以通过别名声明引入tydurif名称。Using关键字后面的标识符变成tyduif-name,而标识符后面的可选属性-说明符-seq属于该ty胡枝子名。它具有相同的语义,就好像它是由tyHuif说明符引入的一样。特别是,它不定义新类型,并且它不应出现在类型id中。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信