C++ const关键字作用与用法

  const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

const的作用:

1、可以定义const常量  const int Max = 100; 

2、便于进行类型检查。const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,

  而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误

  void f(const int i) { .........}
      //对传入的参数进行类型检查,不匹配进行提示

3、可以保护被修饰的东西。防止意外的修改,增强程序的健壮性。

  void f(const int i) { i=10;//error! }
      //如果在函数体内修改了i,编译器就会报错

4、可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变

5、为函数重载提供了一个参考。

  class A
  {
             ......
    void f(int i)       {......} //一个函数
    void f(int i) const {......} //上一个函数的重载
             ......
  };

6、可以节省空间,避免不必要的内存分配。const定义常量从汇编的角度来看,只是给出了对应的内存地址,

  而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,

  而#define定义的常量在内存中有若干个拷贝

  #define PI 3.14159         //常量宏
  const doulbe  Pi=3.14159;  //此时并未将Pi放入ROM中
                ......
  double i=Pi;   //此时为Pi分配内存,以后不再分配!
  double I=PI;  //编译期间进行宏替换,分配内存
  double j=Pi;  //没有内存分配
  double J=PI;  //再进行宏替换,又一次分配内存!

7、提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,

  这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高

 

const修饰变量:

  const [type] x 和 [type] const x形如:

  const int _itemp;

  int const _itemp;

  const修饰的类型为int的变量_itemp是不可变的,表示常量。

 

const修饰指针:

  const [type] * x或 [type] const * x形如:

  const int * _ptemp;

  int const * _ptemp;

  两种写法不同,意义相同

  表示_ptemp是一个int类型的指针, const 修饰 *_ptemp,*_ptemp表示_ptemp所指向的内容,即不能改变

  指针指向的变量内容。

 

  [type] * const x形如:

  int * const _ptemp;

  表示_ptemp时一个int类型的指针,const修饰_ptemp(指针本身),不能改变指针变量_ptemp本身的值,

  即不能改变指针指向。

 

  const [type] * const x形如:

  const int * const _ptemp;

  表示_ptemp是一个int类型的指针,第一个const修饰 *_ptemp,指针指向内容不可变,

  第二个const修饰_ptemp,表示指针本身不可变,即指针指向不可变。

 

const修饰引用

  const [type] &x 和 [type] const& x形如:

  const int & _itemp;

  int const& _itemp;

  这两种情况写法不同,类似于const int x 和 int const x。引用和引用对象是一体的所以这两种写法的意义一样

  const修饰引用,引用本身内容不可变,但引用的变量(或对象)可以改变.

  [type] & const x形如:int & const _itemp;不存在此种形式。

 

参考:关于C++ const 的全面总结_亿言-CSDN博客_c++ const

      C++ const 关键字小结 | 菜鸟教程 (runoob.com)

posted @ 2020-12-03 15:37  虾米没有肚  阅读(593)  评论(0)    收藏  举报