关于const的全面总结

来源:互联网 发布:网络最火的手机铃声 编辑:程序博客网 时间:2024/03/29 19:28

关于const的全面总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。

Const C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。

 

一、Const作用

   如下表所示:

No.

作用

说明

参考代码

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的使用

1、定义常量
(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。

 TYPE const ValueName = value; 
    
 const TYPE ValueName = value;


(2)const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.

     extend const int ValueName = value;

2、指针使用CONST
(1)指针本身是常量不可变
    
 (char*) const pContent; 
    
 const (char*) pContent; 

(2)
指针所指向的内容是常量不可变
    
 const (char) *pContent; 
    
 (char) const *pContent; 

(3)
两者都不可变
     
 const char* const pContent; 

(4)
还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

 

3、函数中使用CONST

(1)const修饰函数参数
a.
传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

  • 关于const的全面总结
  • 关于const的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结 收藏
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 关于C++ const 的全面总结
  • 【北京】急聘PHP或C/C++的coding达人(>10K,Yahoo-onsite)
  • 测试
  • 算法导论 4.6
  • javaScript checkbox全选
  • PHP利用Curl、socket、file_get_contents POST数据
  • 关于const的全面总结
  • windows笔记-创建线程的另一个函数_beginthreadex
  • SWT窗口居中的设置
  • 安装完oracle后,发现计算机名不符合要求
  • poj 2400 Supervisor,Supervisee
  • hello android v3 (1):r.java中的layout
  • 'operator <<' is ambiguous
  • int 和 String 互相转换的多种方法
  • mysql数据据存储引擎InnoDB和MyISAM的优势及区别
  • 原创粉丝点击