const 和static

const 和static

int main(){
    const int a = 10;
    static int b = 20;
}

汇编

main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 10
        mov     eax, 0
        pop     rbp
        ret
  • static
    • 不考虑类
      • 隐藏,不加static的全局变量和函数全局可见,可以在其他文件使用;加了就只能在本文件中使用。
      • 默认初始化为0,存在全局未初始化区。
      • 静态变量在函数内定义,跟局部变量作用域一样,函数退出后,存在但不可用。
    • 考虑类
      • 成员变量:与类关联,不与对象关联。定义时会分配空间,不能在类声明的时候初始化,可以被非static成员函数任意访问。
      • 成员函数:不具有this指针,无法访问类对象的非static成员变量和成员函数;不能被声明为const,需函数和volatile;可以被非static成员函数任意访问。
class A{
public:
    static int i;//静态成员变量
};
int A::i = 20;
int main(){
    A* a;
    A* b;
    cout << "a:" << a->i << " b:" << b->i <<endl;
    
}
//输出:a:20 b:20
  • const
    • 不考虑类
      • 常量必须初始化,之后无法更改
      • 形参可以接收const和非const的实参
    • 考虑类
      • 成员变量:不能在类定义的外部初始化,只能通过构造函数初始化列表初始化,并且必须有构造函数;不同对象的const成员变量可以不同,所以不能在类声明的时候初始化。
      • 成员函数:const对象不能调用非const成员函数;非const对象都可以调用;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值