案例1:
using unumber = unsigned long;
unumber uvalue {};
案例2:
using udigit_t = unsigned char;
using ubigvalue_t = vector<udigit_t>;
ubigvalue_t ubig_value;
using
在这种情况下是否像推断类型一样工作?
答案 0 :(得分:3)
基本上,using
是{C} 11以来typedef
(以及其他内容)的另一个关键字。这两个都用于创建类型别名。因此,
using udigit_t = unsigned char;
和
typedef unsigned char udigit_t;
是相同的表达式,这将允许您使用udigit_t
,就像您编写unsigned char
一样(带有一些陷阱)。有关更多信息,请查看此处:
答案 1 :(得分:1)
using
可用作typedef
的替代,用于在C ++ 11中定义类型别名(无C ++ 03/98)。在某些情况下,它使您的代码更容易查看。比较这些例子。
typedef unsigned char byte, *pbyte, &rbyte;
using byte = unsigned char;
using pbyte = unsigned char*;
using rbyte = unsigned char &;
typedef int (*fun)(int, int);
using fun = int (*)(int, int);
// And when later...
fun f = [&](int a, int b){return a + b;};
在这种情况下,using
不表示推断类型,但是明确定义的类型。要让编译器推断并确定变量的类型,请使用auto
(仅限C ++ 11)。所以你可以写
auto f = [](){return 1;};
// No more need to write this below
int (*f)(void) = [](){return 1;};