C++11新特性:类型别名,auto类型,decltype类型

时间:2022-03-04 18:47:16

1. 类型别名:

   传统的方法是使用typedef关键字来定义类型别名,如: typedef double wages;

   C++11新标准规定了一个新的方法,使用using关键字实现类型别名,如 : using SI = int ; 此时,SI 与 int 为同义词。

   新的方法比之传统更加直观,易于理解。另外对于类型别名,如果要为复合类型定义类型别名,则需要特别注意,如 : typedef char *pstring;则pstring指代的是指向char的指针,语句const pstring cstr = 0 中,基本数据类型为指针,

2. auto 类型

 auto类型是新标准引入的类型说明符,使用auto类型定义变量时,编译器会为我们分析表达式的类型,由此可知:auto定义的变量必须具有初始值。另外,如果使用auto在一条语句中同时声明多个变量,则必须保证所有变量的基本数据类型是一致的,下面的语句是不正确的:

   auto i= 1, j = 0.1;因为i 的类型是int , j 的类型 是 float ,两者的基本数据类型不同

  另外,auto 类型一般会忽略掉顶层const,保留底层const


3. decltype 类型指示符

    这种类型指示符的作用是: 从一个表达式的返回值中推断变量的类型,在此过程中,编译器分析表达式并得到类型,但不实际计算表达式的值,如果表达式是一个函数,则编译时不实际调用函数,而是将函数返回的类型作为结果类型。

    如果表达式是一个变量,则返回该变量的类型(包括顶层const和引用在内),如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型,如果表达式的类型是解引用操作,则将得到引用类型;另外,decltype中的表达式对括号是敏感的,一个变量如果不加括号,则decltype返回该变量的类型,如果加了括号,decltype则把它当做表达式看待,返回其结果类型。

  切记: decltype((variable))的结果永远是引用