• c++ 学习 之 const,constexpr,volatile


    前言

    const、constexpr 和 volatile 是 C++ 中用于修饰变量和类型的关键字

    正文

    它们分别用于不同的用途:

    const(常量):
    const 用于声明常量,表示变量的值不能被修改。
    它可以应用于变量、指针、引用、成员函数以及类对象
    常量变量必须在声明时初始化。
    常量成员函数承诺不修改对象的状态。
    常量指针和常量引用可以用于传递参数,以确保函数不会修改传入的值。
    示例:

    const int x = 5; // 声明一个常量整数
    const double PI = 3.14159; // 声明一个常量双精度浮点数
    
    void foo(const int& val) {
        // val 是一个常量引用,不能在函数中修改它
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    constexpr(常量表达式):
    constexpr 用于声明常量表达式,它在编译时求值。
    constexpr 变量必须在声明时用常量表达式初始化,可以用于编译时计算。
    constexpr 函数可以在编译时计算,用于生成编译期常量。
    constexpr 可以提高性能,因为编译器可以在编译时执行计算,而不需要在运行时进行计算。
    示例:

    constexpr int square(int x) {
        return x * x;
    }
    
    constexpr int result = square(5); // 编译时计算
    
    const int size = 10;
    int arr[size]; // 使用 const 常量来定义数组大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    volatile(易失性):
    volatile 用于告诉编译器,变量的值可能在程序的执行中被外部因素修改,因此不应进行优化。
    通常用于描述硬件寄存器、多线程编程中的共享变量等。
    volatile 可以防止编译器对变量的读取和写入操作进行优化,以确保每次访问都是真实的。
    示例:

    volatile int sensorValue; // 用于描述外部传感器值
    
    void readSensor() {
        sensorValue = /* 从传感器读取值 */;
    }
    
    int main() {
        while (true) {
            readSensor();
            // 使用 sensorValue 进行操作,编译器不会优化读取操作
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总之,const 用于声明常量,constexpr 用于声明编译时常量,而 volatile 用于告诉编译器变量的值可能会在外部因素的影响下发生变化。这些关键字在 C++ 中有不同的用途,根据具体需求来选择使用。

  • 相关阅读:
    小侃设计模式(四)-原型模式
    Smart Community(1)之设计规范
    使用Node.js搭建服务器
    [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]
    Quantlab5.0:一切围绕可实盘策略驱动开发
    MySQL 主从复制数据不一致,怎么办?
    基于Web的大学生实验课预约管理系统
    充电桩软硬件,赚钱新招数!-慧哥充电桩开源系统
    卷积神经网络到底是什么,卷积神经网络是一种
    git命令行学习
  • 原文地址:https://blog.csdn.net/wniuniu_/article/details/132721733