zoukankan      html  css  js  c++  java
  • 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
    ",*cptr);
        double dval = 3.16;
        cptr = &dval;
        printf("%.2lf
    ",*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; //常量指针
    
  • 相关阅读:
    Codeforces_731_C
    Codeforces_731_B
    Codeforces_731_A
    HDU_1035_水
    POJ_3450_KMP
    POJ_2185_二维KMP
    POJ_2752_KMP
    Codeforces_492_E
    Codeforces_338_D
    Codeforces_327_C
  • 原文地址:https://www.cnblogs.com/rainyy/p/11516466.html
Copyright © 2011-2022 走看看