[C++]static和const区别

static的整理总结已经在static总结中写过,没看过的可以先去看一下。

这里主要针对static和const在类中定义和调用的时候区别进行总结
代码如下,已加上注释:

#include<bits/stdc++.h>
using namespace std;
class testClass{
	public:
		static int _datai;//不能在类内初始化 
		const int _dataj=2; //可以在类中声明常量成员 必须初始化 (c++11实现,之前不能进行初始化)
		enum{_datak=3};     //(c++11之前可以用枚举类型实现常量成员)
		static const int _datac=4;//定义静态常量成员 
}; 
int testClass::_datai=1; //对于static成员变量只能在类外初始化 


int main(){
	testClass a;
	testClass b;
	cout<<"对象a调用常量成员:"<<a._dataj<<endl; //2
	cout<<"对象a调用枚举常量:"<<a._datak<<endl;//3 
	cout<<"对象a调用静态常量成员:"<<a._datac<<endl;//4 
	
	cout<<"对象a调用静态成员:"<<a._datai<<endl; //1
	b._datai=5;
	cout<<"对象a再次调用静态成员:"<<a._datai<<endl;  //5
	
	cout<<"类名调用静态成员:"<<testClass::_datai<<endl;//1     
	cout<<"类名调用静态常量成员:"<<testClass::_datac<<endl;//4
}

static成员变量在类中声明后,不管是否实例化对象,都已经存在于静态存储区中,类似于在类中的全局变量,可以通过类名::成员名直接调用。
const成员常量在C++11之前都是不能直接在类中初始化的,从C++11开始就可以了,调用const成员常量只能进行读取,无法修改(只读操作),保证了类成员数据不会由于某些类函数调用后值发送改变(会报错提示)。


  • 额外考点:宏定义和const区别?

宏替换发生在编译阶段之前,属于文本插入替换;const作用发生于编译过程中。

宏不检查类型;const会检查数据类型。

宏定义的数据没有分配内存空间,只是插入替换掉;const定义的变量只是值不能改变,但要分配内存空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值