美文网首页C++
C++: const详解

C++: const详解

作者: 赵伯舟 | 来源:发表于2018-08-18 11:52 被阅读0次

一、const变量

const修饰一个变量,代表这个变量是个常量,不可改变:

    const int n = 1;
    n++; /// error

二、const与指针

1. 指向常量的指针
    const int * p1 = new int(2);
    *p1 = 3;        /// error
    p1 = new int(3);/// works
    *p1 = 4;        /// error

如上,p1是一个指针,将其看成是(const int) * p1,可知其指向的内容是一个常量,所以*p1 = 3会报错,但是,这个指针可以指向别的变量,不过其指向的内容依然不可变

2. 指针本身是常量
    int * const p1 = new int(3);
    (*p1)++;          /// works
    p1 = new int (4); /// error

可以看成是int * (const p1),即p1是个常量,不可改变,但是p1指向的内容是可变的,所以(*p1)++能够正常运行
  自然,若是const int * const p1 = new int (0),则不管是指针本身,还是其指向的变量,都是不可变的。

三、const与函数参数

  • void func(const int n):参数n是个常量,在函数里面不会被改变
  • void func(const int& n):按引用传值,且不会在函数体内被改变,比上一种方式好
  • void func(const int *p):指向常量的指针,其指向内容不会被改变
  • void func(int* const p):指针本身是常量,本身不会被改变

四、const与类

1.const修饰成员变量
class Foo
{
public:
    const int n;
    const int * p;
    Foo(int _n = 0, const int * _p = nullptr) : n(_n), p(_p){};
};

const修饰成员变量,表示其为常量不可修改,注意其需在初始化列表里初始化

2.const修饰成员函数
class Foo
{
public:
    const int n;
    int m = 0;
    Foo(int _n = 0) : n(_n){};
    void func1()const 
    {
        m++;               /// error
        cout << n << endl;
        
        func2();          /// error
    }
    void func2()
    {
        m++;
    }
};

const作用于成员函数的形式为:void func()const,其表示不会在函数体内修改任何成员变量,那它怎么保证我们无法修改成员变量呢?,基于下面的规则:

  • const成员函数内只能调用const成员变量:非const成员变量无法被调用,所以修改不了,const成员变量能够被访问,但是其本身无法被修改
  • const成员函数不能调用非const成员函数:非const成员函数可能修改成员变量,所以禁止调用,而其他const函数因为不会改变成员变量,所以可以调用,“保证了纯正的血统” : P
3. const修饰对象
    const Foo foo;
    
    foo.m ++;              /// error
    cout << foo.m << endl; /// works
    
    foo.func1();           /// works
    foo.func2();           /// error

const修改对象,表示这个对象是个常量,里面的数据不能被修改,其限制基于下面规则:

  • 公有变量只可读,不可写
  • 该对象只能调用const成员函数
    const修饰对象指针也是同样的道理:
    const Foo * p1 = new Foo();
    p1->m++;               /// error
    cout << p1->m << endl; /// works
    
    p1->func1();           /// works
    p1->func2();           /// error

相关文章

  • c++ volatile关键字

    Ref cppreference - const vs volatileC/C++中volatile关键字详解 v...

  • C++: const详解

    一、const变量 const修饰一个变量,代表这个变量是个常量,不可改变: 二、const与指针 1. 指向常量...

  • C++常对象-常函数-常成员变量

    C++常对象-常函数-常成员变量 C++常对象 C++常对象, 就是使用const修饰的类实例!const A a...

  • C/C++ const用法详解

    const变量,又称为常量 1. 创建常量 const type name = value;type const ...

  • 常应用问题

    C++ const 常指针:const int* ptr;const 修饰int*,ptr指向整形常量,ptr指向...

  • C/C++ Const 小知识

    Const Const 特点 [描述] 在 C、C++、D 和 JavaScript 编程语言中,const是一个...

  • 网易云课堂(Boolan)C++ 第五周笔记

    CONST C++中只有const对象调用对象内非const函数会不成功,所以能加const的尽量加const,而...

  • OpenCV2 图像叠加

    C++:void Mat::copyTo(OutputArraym)const C++:void Mat::cop...

  • 引用

    1、C++类型检查严格 ```c++ const int a = 10; int b = a; cont int ...

  • C++面经

    1. 语言基础 1.1 C++的四种类型转换: const_cast => 用于将const变量转为非const;...

网友评论

    本文标题:C++: const详解

    本文链接:https://www.haomeiwen.com/subject/vdaxiftx.html