C/C++中const用法小结

本文详细介绍了C/C++中const关键字的各种用途及其如何提高程序的安全性和效率。包括定义常量、类型检查、保护变量、函数重载、节省内存、提高编译效率等,并举例说明了const在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1.CHI%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C13%5Cclip_filelist.xml">

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1.CHI%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C14%5Cclip_filelist.xml">

C/C++中const用法小结

 
  
1)可以定义const常量       

    例如:
             const int Max=100;
             int Array[Max];       
  
2)便于进行类型检查         

    例如:
             void f(const int i) { .........}
       
编译器就会知道i是一个常量,不允许修改;
  
3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
       
还是上面的例子,如果在函数体内修改了i,编译器就会报错;
       
例如:
             void f(const int i) { i=10;//error! }
    (4)
为函数重载提供了一个参考。
         class A
         {
           ......
           void f(int i)       {......} file://
一个函数
           void f(int i) const {......} file://
上一个函数的重载
            ......
          };
     (5)
可以节省空间,避免不必要的内存分配。
        
例如:
              #define PI 3.14159         file://
常量宏
              const doulbe  Pi=3.14159;  file://
此时并未将Pi放入ROM
              ......
              double i=Pi;               file://
此时为Pi分配内存,以后不再分配!
              double I=PI;               file://
编译期间进行宏替换,分配内存
              double j=Pi;               file://
没有内存分配
              double J=PI;               file://
再进行宏替换,又一次分配内存!
         const
定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
   
6 提高了效率。
          
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

使用const
   A
、修饰一般常量,常数组,常对象
   修饰符const可以用在类型说明符前,也可以用在类型说明符后。 例如:  
           int const x=2;
  或  const int x=2;

       int const a[5]={1, 2, 3, 4, 5};      const int a[5]={1, 2, 3,

4, 5};

           class A;
      const A a;       A const a;
     
   B
、修饰指针
        const int *A;   
  int const *A; //const修饰指向的对象,A可变,

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

      向的对象可变
        const int *const A;      //
指针AA指向的对象都不可变

     C、修饰引用
 
       const double & v;      该引用所引用的对象不能被更新

(引用占用内存,内存中存放的是被引用对象的地址;)
D
、修饰函数的返回值:
        const
修饰符也可以修饰函数的返回值,是返回值不可被改变,格式

如下:
            const int Fun1();
            const MyClass Fun2();

7)修饰类的成员函数:
        const
修饰符也可以修饰类的成员函数,格式如下:
            class C
         {
             public:

C(int i){this->i = i;}
           
      int Fun() const;//类中的成员变量均为const类型
           
        .....

public:

int i
             }

       
这样,在调用函数Fun时就不能修改类里面的数据 ,如

int Fun() const

{

       this i = 10;//试图改变成员变量,错误;

     return i;

}

再如:

int &Fun() const

{

//         this i = 10;//试图改变成员变量,错误;

     return i;//试图将一个const int 返回给一个int的引//用,错误;

}

8)修饰一个返回引用的成员函数:

如:

int &Fun()

{

     Ruturn i;

}

 

main()

C c(5);

c.Fun() = 100;//对此函数赋值;
但如果

const int &Fun()

{

     Ruturn i;

}

c.Fun() = 100;//试图对此函数赋值,就会出错,因为返回是个const//引用了;

当然

const int &Fun() const

{

     Ruturn i;//正确

}


(9)类成员数据的初始化

class C
     {
         public:

              C(){}

              ~C(){}

public:

static const int m_nAge = 10;//VC中不允许,在VS2005

// 中可以,值得关注这本身就是在 C++ 语法中是允许的(详见 //C++Primer
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值