C++ 学习笔记(一)

变量的声明与定义

声明关键字 extern

extern int a; //声明
int a; 	//声明并定义
extern int a = 1; //定义

变量可以被多次声明,仅可定义一次

若想在多个文件中同时应用const 对象,需要在const前加extern

extren const int a = 100;

const 限定符

对const 的引用(简称常量引用)

例:

	int i = 42;
    const int &r1 = i;
    const int &r2 = 42;
    const int &r3 = r1 * 2;

常量引用可以对非常量执行,但是无法修改引用值,也不能通过引用值修改常量.

指向常量的指针

const 可以令指针指向常量或非常量.

不过指针不能修改所指对象的值.

	const double pi = 3.14;
    const double *cptr = π
    printf("%.2lf\n",*cptr);
    double dval = 3.16;
    cptr = &dval;
    printf("%.2lf\n",*cptr);
output:
3.14
3.16

所谓指向常量的指针,仅仅是指不能通过该指针改变常量的值,但是可以通过其他方式改变

const指针

即指针是对象,把指针本身定位常量

即指针本身指向不可更改,但可通过其改变其指向的非常量的值

int a = 0;
int *const pa = &a;				//常量指针
const double pi = 3.14;
const double *const ppi = &pi	//指向常量的常量指针

顶层const

  • 顶层const表示指针本身是个常量,
  • 而底层const表示指针所指对象是个常量.
目前所见有
int *const p = &i; 		//顶层const
const double pi = 3.14;	//顶层const
const double *ppi = π//底层const
const int &r = i;		//用于声明引用的const均为底层const

分别const是底层或顶层时,按定义区分即可.

在底层const对象的拷贝中,拷入与拷出必须拥有相同的底层const资格,或两者两者类型可以进行转换.

常量表达式

即值不会改变,且值在编译过程中就可得到

例如 
const int mx = 100;
const int mxx = mx + 10;
而如下表达式就不是
const int x = get_size();	//编译过程无法得到其值,须运行时确定
int y = 10;				//值不确定

constexpr限定符

将变量声明为constexpr类型,可由编译器来验证变量的值是否是个常量表达式.

且可用于声明函数,但此类函数须足够简单,能让编译器编译后即可得到结果.这样的函数,就可以去初始化constexpr变量

constexpr int mf = 20;
constexpr int limit = mf + 1;
constexpr int sz = size();	//size() 为constexpr函数

constexpr 定义的指针和引用初始值受到严格限制.

即定义在任何函数中的变量均不可被constexpr修饰,因为函数体内的变量定义一般并不会存放在固定地址.

注意: 若constexpr定义中存在指针,则此指针为常量指针,即与其指向的对象无关.

const int *p = &i;	//指向常量的指针
constexpr int *q = &j; //常量指针
posted @ 2019-09-13 11:37  _Rainy  阅读(147)  评论(0编辑  收藏  举报