zoukankan      html  css  js  c++  java
  • [C++ 笔记] const的用法

    const的用法有以下几种:

    ① 修饰全局变量时,表明它是一个常量,作用域在有static修饰的时候是本文件的作用域,如果没有static修饰的时候作用域是全局的;(#define宏定义的区别⑴ const定义的常量需要进行静态类型安全检查,而#define定义的常量只是在编译预处理时期,直接进行文本替换,没有类型检查。⑵ 有些编译器可以对const定义的常量进行调试,而#define不会进行调试。⑶ const定义常量不会出现边际效应,而#define的边际效益经常发生)

    ② 修饰局部变量时,同①;只是作用域变成了函数局部变量了;

    例子:

    const int Asize =100;

    const int data[] = {1,2,3,4,5};

    const struct cir c1 = {1,2,3};

    // 分别表示整型变量Asize、数组data以及结构体c1不能够再改变

    ③ 修饰指针

    ⑴ 将指针所指向的对象定义成常量但指针不是常量;[const没有越过*]

    const <类型>  *指针名 初始值;

    <类型> const  *指针名 初始值

    [例子]

    const char *pStr = "abcd"; 或者char const* pStr = "abcd"

    pStr[2] = 'c';  //出错;

    pStr = "cdef"; // OK

    ⑵ 将指针定义为常量而指针指向的对象不是常量;  [const越过*]

    <类型> *const 指针名 初始值;

    [例子]

    Char * const pStr = "abcd";

    pStr = "defa";  //出错

    pStr[2] = 'd';   // OK

    ⑶ 将指针以及指针指向的对象都定义为常量;   [*号两边都有const]

    Const <类型> * const 指针名 初始值;

    Const char * const pStr = "abcd";

    pStr = "dewfe"; // 出错

    pStr[2] = 'd'; // 出错

    ④ const修饰函数的形参

       表明在该函数中不能够改变该参数的值;具体要试形参的类型类看,如果形参是基本类型的变量,那同const修饰变量的用法,如果形参是指针,那同const修饰指针的用法;

    ⑤ const修饰函数的返回值

       主要用于防止用户将一个函数的返回值作为表达式的左值来使用;比如const char*strCopy(char *dest, const char *src); 函数返回一个const的指针,那么我就不能够这样用了 strCopy(pStr, "abd") = "abcd";//出错

    ⑥ 类常量成员函数

       将const用来类的成员函数形参表()与函数体{}之间的const.[与类的成员函数返回const类型值区别]

       主要表明该成员函数不能够修改调用该成员函数的对象的成员变量。[类常量成员函数不能够定义为static,即不能够定义为static int getX()cosnt{}; 因为static函数是属于类的,它能够修改的参数只有自己的形参、类的静态成员变量以及全局变量,而这三者都不属于一个类的对象的,所以一个类的常量成员函数没有必要定义为static,而定义为static时,编译器会报错]

    比如:

    class test {

    public:

      int getX()const {

    return m_x;

    }

    private:

      int m_x;

    }; 

  • 相关阅读:
    【转】千万别理程序员
    qemu-ifup and qemu-ifdown
    Fedora-23 installation in VM image
    Set up bridge to connect to internet
    fedora25 上设置br0
    助教工作总结
    树1
    线性结构
    链表基本操作
    自定义函数
  • 原文地址:https://www.cnblogs.com/Firefly727/p/2174597.html
Copyright © 2011-2022 走看看