C++ const关键字

1 const与#define的区别

  1. #define是预处理器选项,可能会不被认为是语言的一部分–在预处理阶段就完成了变量名的替换. const是编译器可见的,其占存储空间,位于符号表(symbol table)而不是内存. 在调试时可以"追根朔源".
  2. 相较于#define,const更节省内存,其只有一份备份.而#define在程序预处理时,会将程序段中的所有宏进行替换,造成由多处复制品#define.
  3. const变量位于符号表中,所以免去了读取内存的时间,效率更高.
  4. const更安全.

2 const对于指针

分辨常量指针与常指针的方法是: 看const位于 * 的哪里,左边就是常量指针,右边就是常指针
E.g.:

	/*这两种都是常量指针,注意*运算符与const的位置关系*/
	const int* p = 5;
	int const* p = 5;
	
	/*这种是常指针,注意*运算符与const的位置关系*/
	int* const p = 5;
	
	/*这种是常量指针+常指针,注意*运算符与const的位置关系*/
	const char* const str = "hello char*";			
	cosnt std::string const str = "hello string"		//使用string更好

在C++里,字符串尽量选用string, 要比char*更好

3 const对于class

普通成员变量使用const定义,构造函数要用初始化表进行初始化.

3.1 对于静态成员static:

  1. 首先需要明确: 静态成员与普通成员不同,其占用内存空间,在class还没有实例化对象时,就已经存在了,因此类的static成员的声明在类内,初始化(定义)一般在类的外部.
class A{
   
private:
	static int a;	//声明
}
int A::a = 5		//定义
  1. 1的特例:在C++11以后新的编译器支持: 如果类内的static是个整形变量(int, bool, char)则可以在类内声明.
class A{
   
private:
	static int a = 5;
}
  1. 静态成员static加入const之后,新编译器允许对整型变量完成内类声明,而无需定义式.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值