设为首页 加入收藏

TOP

C++ 中的处理类型(一)
2014-04-06 17:35:25 来源: 作者: 【 】 浏览:193
Tags:  处理 类型

  一、类型别名

  有两种方法可以定义类型别名:

  <CODE>typedef double wages;  // wages 是 double 的同义词

  typedef wages *p;  // p 是 double* 的同义词

  </CODE>

  新标准规定了一种新的方法:

  <CODE>using SI = Sales_item;  // SI 是 Sales_item 的同义词

  </CODE>

  类型别名和类型名等价,只要是类型的名字能出现的地方,就能使用类型别名

  如果某个类型别名指代的是复合类型或常量,那么把它用在声明语句里就会产生意想不到的后果:

  <CODE>typedef char *pstring;

  const pstring cstr = 0;  // cstr 是指向 char 的常量指针

  const pstring *ps;  // ps 是一个指针,它的对象是一个指向 char 的常量指针

  const char *cstr = 0; // 是对 const pstring cstr = 0 的错误理解

  </CODE>

  二、auto 类型说明符

  C++ 新标准引入了 auto 类型说明符,用它就能让编译器替我们去分析表达式所属的类型,使用 auto 也能在一条语句中声明多个变量,因为一条声明语句只能有一个基本数据类型,所以语句中所有变量的初始基本数据类型都必须一样:

  <CODE>auto i = 0, *p = &i;  // 正确,i 是整数,p 是整型指针

  auto sz = 0, pi = 3.14;  // 错误,sz 和 pi 的类型不一致

  int i = 0, &r = i;

  auto a = r;  // a 是一个整数,当引用被用作初始值时,真正参与初始化的其实是引用对象的值

  </CODE>

  auto 一般会忽略掉顶层 const,同时底层 const 则会保留下来:

  <CODE>const int ci = i, &cr = ci;

  auto b = ci;  // b 是一个整数(ci 的顶层 const 特性被忽略掉了)

  auto c = cr;  // c 是一个整数

  auto d = &i;  // d 是一个整型指针

  auto e = &ci;  // e 是一个指向整数常量的指针(对常量对象取地址是一种底层 const )

  </CODE>

  如果希望推断出的 auto 类型是一个顶层 const,需要明确指出:

  <CODE>const auto f = ci;    // ci 的推演类型是 int, f 是 const int

  </CODE>

  还可以将引用的类型设为 auto,此时原来的初始化规则仍然适用:

  <CODE>auto &g = ci;  // g  是一个整型常量引用,绑定到 ci

  auto &h = 42;  // 错误,不能为非常量引用绑定字面值

  const auto &j = 42;  // 正确,可以为常量引用绑定字面值

  </CODE>

  要在一条语句中定义多个变量,切记,符号 & 和 * 只从属于某个声明符,而非基本数据类型的一部分,因此初始值必须是同一种类型:

  <CODE>auto k = ci, &l = i;  // k 是整数,l 是整型引用

  auto &m = ci, *p = &ci;  // m 是对整型常量的引用,p 是指向整型常量的指针

  auto &n = i, *p2 = &ci;   // 错误,i 的类型是 int 而 &ci 的类型是 const int

  </CODE>

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LuaBridge为Lua绑定C/C++对象 下一篇C++ 指针的偏移

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)