C++ const

来源:互联网 发布:滴滴打车软件 编辑:程序博客网 时间:2024/06/06 09:34
  1. const用法分类

    1.1常变量:  const 类型说明符 变量名1.2 常引用:  const 类型说明符 &引用名1.3 常对象:  类名 const 对象名(实参)  /   const 类名 对象名(实参)1.4 常成员函数:  类名::fun(形参) const1.5 常数组:  类型说明符 const 数组名[大小]    1.6 常指针:  const 类型说明符* 指针名 ,类型说明符* const 指针名1.7 常函数参数:  void Fun( const A *in); //修饰指针型传入参数                    void Fun(const A &in); //修饰引用型传入参数1.8 常函数返回值 const 类名:fun(形参)
  2. 常成员变量

    常成员变量与普通常变量申明类似,区别是常成员变量只能在构造方法参数初始化列表初始化。

    const int a =10 等价于 int const a = 10: 指定a是一个常变量const int *a=&b const修饰的是 *a,故这里表示指针指向的内容*a不能变(不能给*a赋值),但是指针a是可以变的(可以给a赋值为别的地址)。int const *a=&b 与上面的功能相同int * const a = &b: const修饰的是指针a,也就是这里定义了一个常指针,指针本身的值不可以    改变(不可以给指针赋值为别的地址),但是指向的内容*a可以改变(可以给*a赋值别的数据)。const int * const a = &b 指向常数据的常指针,既不可以给*a赋值,也不可以给a赋值。const int &a=100     常数引用,即不能改变引用的值。
  3. const成员函数:用于类数据保护

    const成员函数主要用于数据保护,保护类中对象不被修改,可以使用类中所有成员变量,但是不可以修改成员变量的值。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字

    class Test{public:    char *name;    char *getName() const; }//防止外部修改name的值,故定义为const,只为获取值。char* Test::getName() const{    return name;}
  4. const对象

    const对象必须被初始化。
    若是new初始化,new返回的指针必须是const类型的
    const对象只能访问const成员函数,而非const对象可以访问任意的成员函数;
    const对象的成员是不能修改的,而通过指针维护的对象却可以修改的;

    class Test{public:    string name;    Test(string name);    string getName() const;    void setName(string name);    void setName(string name) const;    //此方法为上一方法的重载};string Test::getName() const{    return name;}Test::Test(string name){    this->name = name;}void Test::setName(string name){    this->name = name;}void setName(string name) const{    this->name = name;//报错,未定义的=:常成员函数不能修改成员变量。}int main(){    using namespace std;    const Test test("xiaoM");    cout<<test.getName()<<endl;    //test.setName("aaa"); //编译错误:常成员对象无法调用非常成员函数}
  5. 常函数参数:避免函数修改传递过来的对象。

    void func(const int a); 做为参数使用,说明函数体内是不能修改该参数的;
    对不同参数定义时不同的形式,可参见定义变量时使用方式

    同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
    函数参数中const 指针,表示不允许将该指针指向其他内容。

  6. 常函数返回值

    可以阻止用户修改返回值。返回值也要相应的赋值给一个常量或常指针。

  7. 常指针有两种类型:

    const 类型说明符* 指针名 等同于 类型说明符 const* 指针名:指针名不能指向别的内存地址,但可以修改其指向的内存地址的内容。

    类型说明符* const 指针名*指针名 的内容不可以改变,但指针名可以指向别的字符串

  8. 使用

    定义const常量方便编译器进行类型检查保护被修饰的内容,避免意外修改节省空间提高效率
  9. mutable

    mutable也是为了突破const的限制而设置的,只能修饰类的非静态数据成员.

    使用场景:

    需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

1 0
原创粉丝点击