c++ 之 引用类型 const 用法

引用即别名

引用必须初始化因为其是常量

引用是常量 不能定义引用的引用

只能绑定常量,不能和常量(字面值)及表达式绑定

 

const定义之后就不能更改,所以定义时就要初始化

int i;

const int j = i;  //合法

默认 const 的值只在文件内有效

对于const变量定义和声明都使用extern修饰

 

const的引用:

  可以绑定到const对象上,像绑定到其他对象上一样又叫对常量的引用(reference to const)

      const int ci = 1234;

  const int &r1 = ci;

 初始化常量引用时可以用任意表达式(结果得同类型)作为初始值

  int i = 42;

  const int &r1 = i;

  const int &r2 = 42;

  const int &r3 = r1 * 2;

 

顶层const表示指针本身是个常量,底层const表示指针所指的duixiang

是个常量.

  如:  const int a = 4;

     const int *p = &a;   //底层const指针

     int * const p1 = &a;  //顶层const指针

 

constexpr变量:

  c++11新标准规定,允许变量声明为constexpr类型以便由编译器

  来验证变量的值是否是一个常量表达式.

声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
    constexpr int mf = 20

    constexpr int limit = mf + 1;

 

指针和引用都能定义成constexpr,但它们的初始值是严格限制的

一个constexpr指针的初始值必须是nullptr或0,或是存储于某个固定

地址中的对象.

 

  const int *p = nullptr;    //p是一个指向整型常量的指针

  constexpr int *q = nullptr;  //p是一个指向整数的常量指针

 

类型别名: 定义别名可用typedef和using两个命令

  1. typedef double wages; typedef wages base, *p;

  2. using SI = Sales_item;  //SI是Sale_item的同义词

 

auto:  auto ordinarily ignores top-level const

  auto a = b + c;

  const int ci = i;

  const auto f = ci;

  auto &g = ci;

  const auto &j = 42;

decltype:  When the expression to which we apply decltype is a variable,

decltype returns the type of that variable, including top-level const and
references:

  decltype(f())  sum = x;  //sum has whatever type f returns

  const int ci = 0, &cj = ci;

  decltype(ci) x = 0; // x has type const int
  decltype(cj) y = x; // y has type const int& and is bound to x
  decltype(cj) z; // error: z is a reference and must be initialized

 

// decltype of a parenthesized variable is always a reference
  decltype((i)) d; // error: d is int& and must be initialized
  decltype(i) e; // ok: e is an (uninitialized) int

 

posted @ 2016-05-22 21:17  孤灯下的守护者  阅读(465)  评论(0编辑  收藏  举报