C++中const用法总结

Posted CoderCong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中const用法总结相关的知识,希望对你有一定的参考价值。

1修饰变量/指针

  注意以下几种修饰的区别:

    (1)const int * a;

    (2)int const *a;

    (3)int * const b;

    (4)int const* const c;

  其中前两种指a是一个指向const int变量的指针;(3)b是一个const型的指向int变量的指针;(4)c是一个const型的指向const int变量的指针。

2修饰函数形参变量/指针/引用

  如

    void fun(const a,const* b,const& c)

  指形参a和b、c在函数fun内是不可以被改变的。

  其实对变量a来说,const对它没有任何意义,因为a作为形参,本来就是实参的一个复制品,它的改变与否与实参没有任何影响。更常用的是修饰指针或变量,这样会使得函数的使用者无法改变实际指向/引用的变量,保证了安全性。

3修饰函数返回值

  如

    const int fun1()

    const int* fun2()

    const int& fun3()

  这种用得不是很多,作用类似于修饰变量,返回一个const型的变量

4修饰类对象/指针/引用

  如

    const classA a;

    const classB* b;

    const classC& c;

  (1)不能改变对象的任何成员变量

  (2)不能调用任何非const成员函数

5修饰类成员变量

  (1)不能被修改

  (2)只能在类初始化列表中被赋值

6修饰类成员函数

  如

    void fun() const;

  (1)不能修改类的任何成员函数

  (2)不能调用类的任何非const函数

  (3)const对象/指针/变量只能调用const成员函数

 

const常量与define宏定义的区别


  (1) 编译器处理方式不同

    define宏是在预处理阶段展开。

    const常量是编译运行阶段使用。

  (2) 类型和安全检查不同

    define宏没有类型,不做任何类型检查,仅仅是展开。

    const常量有具体的类型,在编译阶段会执行类型检查。

  (3) 存储方式不同

    define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

    const常量会在内存中分配(可以是堆中也可以是栈中)。

 

以上是关于C++中const用法总结的主要内容,如果未能解决你的问题,请参考以下文章

(转载)C++ string中find() ,rfind() 等函数 用法总结及示例

《c++ const 详细总结》--转载

关于C++ const 的全面总结

C++中const关键字的使用总结

关于C++ const 的全面总结《转》

c++ const总结