【发布时间】:2012-05-31 15:30:39
【问题描述】:
我知道在 C++11 中我们现在可以使用 using 来编写类型别名,例如 typedefs:
typedef int MyInt;
据我了解,相当于:
using MyInt = int;
新语法源于努力表达“模板类型定义”:
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
但是,对于前两个非模板示例,标准中是否还有其他细微差别?例如,typedefs 以“弱”的方式进行别名。也就是说,它不会创建新类型,而只会创建新名称(这些名称之间隐含转换)。
和using一样还是生成新类型?有什么不同吗?
【问题讨论】:
-
我个人更喜欢新语法,因为它更类似于常规变量赋值,提高了可读性。例如,您更喜欢
typedef void (&MyFunc)(int,int);还是using MyFunc = void(int,int);? -
我完全同意,我现在只使用新语法。这就是我问的原因,以确保确实没有区别。
-
@MatthieuM。顺便说一句,这两个是不同的。应该是
typedef void MyFunc(int,int);(实际上看起来还不错),或者using MyFunc = void(&)(int,int); -
@R.MartinhoFernandes 为什么在
using MyFunc = void(&)(int,int);中需要 (&) ?这是否意味着MyFunc是对函数的引用?如果省略 & 会怎样? -
是的,它是一个函数引用。相当于
typedef void (&MyFunc)(int,int);。如果省略&,则相当于typedef void MyFunc(int,int);
标签: c++ c++11 typedef using-declaration