C++ mutable、constexpr、volatile用法

mutable

该关键字可让const函数内允许修改变量,在非const函数中,表现和普通变量一致。

因为标记const的函数不可修改变量,因此为了某些特殊情况例如缓存变量且缓存值会修改,mutable出现了。

#include <iostream>
using namespace std;

class Test {
private:
    mutable int mutableCount;  // mutable 成员
    
public:
    Test() : mutableCount(0) {}
    
    // const 成员函数
    void increment() const {
        mutableCount++;        // 可以修改 mutable 成员
    }
};

constexpr

constexpr是在编译时求值,类似常量。

const int size = 100;
constexpr int constexpr_size = 100;

void test() {
    int arr1[size]; 
    int arr2[constexpr_size];
}

但常量可能是编译期常量,也可能是运行时常量,并且会占用寄存器。
而constexpr不仅类型指定了,且始终是编译期常量(也可以用于常量表达式)。

对比宏,又有如下优势:

  1. 宏是全局的,无法设定外部命名空间,constexpr可以放在命名空间中
  2. 宏可以不指定类型,而constexpr定义时就会被指定类型

volatile

volatile 告诉编译器:这个变量可能会在程序控制之外被改变,因此编译器不应该对这个变量进行激进的优化。

void consumer(volatile bool& ready_flag) {
    while (!ready_flag) {  // 没有 volatile,编译器可能优化这个检查
        // 等待
    }
    std::cout << "Data: " << shared_data << std::endl;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值