关键字"如何使用"在c ++中使用以下情况?

时间:2017-06-27 23:34:09

标签: c++

案例1:

using unumber = unsigned long;
unumber uvalue {};

案例2:

using udigit_t = unsigned char; 
using ubigvalue_t = vector<udigit_t>; 
ubigvalue_t ubig_value; 

using在这种情况下是否像推断类型一样工作?

2 个答案:

答案 0 :(得分:3)

基本上,using是{C} 11以来typedef(以及其他内容)的另一个关键字。这两个都用于创建类型别名。因此,

using udigit_t = unsigned char;

typedef unsigned char udigit_t;

是相同的表达式,这将允许您使用udigit_t,就像您编写unsigned char一样(带有一些陷阱)。有关更多信息,请查看此处:

Type alias, alias template

答案 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;};