C++ 关键字const

    const主要为了防止所修饰的变量再次被修改。一般在定义的时候初始化但const类的成员变量必须在构造函数的初始化列表中初始化。

    以下是const的常见用法:

     1,用于定义常量变量,这样这个变量在后面就不可以被修改

const int a = 9; a=8;//错误不能再被修改

     2,保护函数参数不被改变

        

void foo(const int& val)
{
      val = 10;//错误 val不能被改变
}

      3,类中使用const修饰函数表示函数只读,不能修改非static的成员变量

      class
      {
         public:
          void fun() const //加const修饰
           {
                a = 10; //出错,不可修改非static变量
                b = 10; //对,可以修改
            }
        private:
          int  a ;
          static int b;
     }


     4,const修饰指针变量时

  (1)只有一个const,如果const位于*左侧,表示指针所指数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元。

  (2)只有一个const,如果const位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改。

  (3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。

const int *A; 或 int const *A;  //const修饰指向的对象,A可变,A指向的对象不可变
int *const A;               //const修饰指针A, A不可变,A指向的对象可变 
const int *const A;           //指针A和A指向的对象都不可变

      5,修饰函数返回值,防止返回值被改变
         const int fun();
         接收返回值的变量也必须加const
        const int a = fun(); //接收的变量也要是const的,int a = fun()是错误的,

     6,修饰类的成员变量

         使用const修饰的变量必须初始化,在类中又不能在定义时初始化,

如;

class
{
private:
  int a = 10;
  const int b = 10;
  static const int c = 10;
//这样初始化都是错的,
}
初始化const int类型(没有static),在类的构造函数上初始化
Class Test
{
Public:
  Test():b(23) //构造函数上初始化b的值为23
   {
}
private:
     const int b ;
}
初始化static const int这个类型的(带有static的),在类的外面初始化
class Test
{
private:
  static const int c;
} 
const int Test::c=10; //类的外部初始化c为10


     7,const定义的对象变量只能作用于这个程序该C/C++文件,不能被该程序的其他C/C++文件调用,

class
{
private:
  int a = 10;
  const int b = 10;
  static const int c = 10;
//这样初始化都是错的,
}
初始化const int类型(没有static),在类的构造函数上初始化
Class Test
{
Public:
  Test():b(23) //构造函数上初始化b的值为23
   {
}
private:
     const int b ;
}
初始化static const int这个类型的(带有static的),在类的外面初始化
class Test
{
private:
  static const int c;
} 
const int Test::c=10; //类的外部初始化c为10

非const变量默认为extern,要是const能被其他文件访问必须显示指定为extern

  8, const 与 define的区别:

 共同点:const和define都可以定义常量

         区别: 1,const 不仅可以定义常量,还有强大的修饰功能。

                    2,const有数据类型,而define没有,编译器对前者具有安全类型检查,而后者只进行简单的替换。

                   3,编译器对const常量分配内存,而对宏不分配。

         宏优点:宏不能可以定义常量,还可以定义表达式 。但表达式一定要带括号。可以让代码更为简洁。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值