C++中const和static的作用

本文详细介绍了C++中的const常量和static关键字。const常量必须在定义时初始化,不可更改,常用于成员函数表示不修改对象状态。static成员变量与对象无关,仅与类关联,需在类外初始化。static成员函数不具this指针,无法访问非static成员。此外,static全局变量和函数限制在本编译模块内使用,局部静态变量在函数退出后仍存在。

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

const
不考虑类的情况
  • const 常量在定义时必须初始化,之后无法更改。
  • const 形参可以接收 const 和非 const 类型的实参,例如:
// i 可以是 int 型或者 const int 型
void fun(const int i){
	//函数实体 ...
} 
考虑类的情况
  • const 成员变量:不能在类定义外部初始化,只能通过构造函数初始化列表进行初始化,并且必须有构造函数;不同类对其 const 数据成员的值可以不同,所以不能在类中声明时初始化。
  • const 成员函数:
  1. const 对象只能调用 const 成员函数,不可以调用非 const 成员函数;非 const 对象既可以调用非 const 成员函数,也可以调用 const 成员函数。
  2. const 成员函数不可以调用其它非 const 成员函数,因为 const 成员函数不可以被改变,而非 const 成员函数可以改变,如果 const 成员函数调用了非 const 成员函数,非 const 成员函数就有可能会破坏 const 成员函数的常性。反之,非 const 成员函数是可以调用其它 const 成员函数的,因为它不会改变 const 成员函数。
static
不考虑类的情况
  • 隐藏。所有不加 static 的全局变量和函数具有全局隐藏性,可以在其它文件中使用,加了 static 之后只能在该文件所在的编译模块中使用。
  • 默认初始化为 0,包括未初始化的全局静态变量和局部静态变量,都存在全局未初始化区。
  • 静态变量在函数内定义,始终存在,且只进行一次初始化,具有记忆性,其作用范围与局部变量相同,但是函数退出后仍然存在但不能使用。
考虑类的情况
  • static 成员变量:只与类关联,不与类的对象关联。定义时要分配空间,不能在类声明中初始化,必须在类外初始化,初始化时不需要标志为 static;static 成员变量可以被非 static 成员函数任意访问。
  • static 成员函数:不具有 this 指针,无法访问类对象的非 static 成员变量和非 static 成员函数;不能被声明为 const 、virtual 和 volatile;static 成员函数可以被非 static 成员函数任意访问。
  • static 对象在函数进入主程序之前就已经被分配空间并创建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值