关于C++ 存储类型auto、register、static、extern、mutable

c++ 变量/函数的可见性以及生存期由存储类型来确定,具体规则为:

1、auto

局部变量、函数的默认存储类型,故该关键字可以不写。如:

{
   int mount;
   auto int month;
}

2、register

标明为寄存器存储类型,不在内存中分配存储空间,要求高速读写的变量可声明为register的存储类型,同时要注意声明为register的变量无法被&操作(引用或取地址),因为它不存在内存中。另外,声明为register的变量在程序逻辑上是存储在寄存器中,但实质并不绝对的保存在寄存器中,这由实际硬件的实现来决定。如:

{
   register int  miles;
}

3、static静态存储。

(1)修饰局部变量时,该局部变量将放在静态存储区存储,生命周期为程序的生命周期。

(2)修饰全局变量时,该变量只在本声明文件中可见。

(3)修饰类成员时,该类成员将独立于类对象,由所有类对象共享。

4、extern

修饰变量/函数时,标明该变量/函数在外部定义,此处是引用该外部变量/函数的声明。

5、mutable

在类成员中使用,修饰一个类成员变量时,即使类成员函数定义为const,也可以在该成员函数中修改被mutable修饰的成员变量。如:

class Person {
public:
    Person();
    ~Person();

    int getAge() const; /*调用方法*/
    int getCallingTimes() const; /*获取上面的getAge()方法被调用了多少次*/
private:
    int age;
    char *name;
    float score;
    mutable int m_nums;            /*用于统计次数*/
};

Person::Person()
{
    m_nums = 0;
}

Person::~Person(){}

int Person::getAge() const
{
    std::cout << "Calling the method" << std::endl;
    m_nums++; //m_nums被声明为mutable的存储类型,即使在const的函数中依然可以被修改。
    // age = 4; 出错,age为默认的存储类型,在const的成员函数中无法被修改。
    return age;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值