C++Primer_引用、指针、常量

引用:

  定义引用时,程序把引用和它的初始值绑定在一起,而不是把初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,因此无法让引用绑定另一个对象,所以引用必须初始化。所有引用的类型都必须要和与之绑定的对象严格匹配,而且引用只能绑定在对象上,而不能和字面值或表达式的结果绑定在一起,以下两种情况例外:

  1. 初始化常量引用时运行用任一表达式做初始值,只要结果能够转换成引用的类型。(临时变量不可)
  2. 可将基类的引用绑定到派生类对象上。

指针:

  1. 存放常量对象的地址,只能使用指向常量的指针。
  2. 允许指向常量的指针指向非常量对象。

常量:

    因为常量对象一旦创建其值不可改变,所以常量对象必须初始化。默认情况下,常量对象仅在文件内有效,要实现文件间共享需在多个文件的定义或声明中加extern关键字。

顶层const:指针本身是常量,也可表示任何对象是常量。

底层const:指针指向的对象是常量。用于申明引用的const都是底层const

    当执行对象的拷贝操作时,常量是底层const还是顶层const区别明显。其中顶层const不受什么影响,但执行对象的拷贝状态时,拷入和拷出对象都必须具有必要的底层const资格,或者两个对象的数据类型必须能够转换。一般来说,非常量可以转换成常量,反之不行。

常量表达式:值不会改变并且在编译过程就能得到计算结果的表达式。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。

constexpr变量:申明为constexpr的变量一定是常量,且必须由常量表达式初始化。一个constexpr指针的初始值必须是nullptr或者0或者是存储于某个固定地址的对象。在constexpr声明中如果定义一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关。


猜你喜欢

转载自blog.csdn.net/accumulating_mocai/article/details/80761144