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 是一个常量引用,不能在函数中修改它
}

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 常量来定义数组大小

volatile(易失性):

volatile 用于告诉编译器,变量的值可能在程序的执行中被外部因素修改,因此不应进行优化。

通常用于描述硬件寄存器、多线程编程中的共享变量等。

volatile 可以防止编译器对变量的读取和写入操作进行优化,以确保每次访问都是真实的。

示例:

复制代码
volatile int sensorValue; // 用于描述外部传感器值

void readSensor() {
    sensorValue = /* 从传感器读取值 */;
}

int main() {
    while (true) {
        readSensor();
        // 使用 sensorValue 进行操作,编译器不会优化读取操作
    }
}

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

相关推荐
q***649710 分钟前
Spring BOOT 启动参数
java·spring boot·后端
百***784513 分钟前
Java实战:Spring Boot application.yml配置文件详解
java·网络·spring boot
你不是我我22 分钟前
【Java 开发日记】SQL 语句左连接右连接内连接如何使用,区别是什么?
java·javascript·数据库
七夜zippoe40 分钟前
Java性能调优工具篇:JMH基准测试与Profiler(JProfiler/Async-Profiler)使用指南
java·开发语言·jprofiler·jmh·async-profiler
龙泉寺天下行走1 小时前
MinGW-w64 工具链(GCC 编译器) 的不同构建版本的区别
c++
從南走到北1 小时前
JAVA国际版二手车交易二手车市场系统源码支持Android+IOS+H5+APP
android·java·ios
Kuo-Teng1 小时前
LeetCode 19: Remove Nth Node From End of List
java·数据结构·算法·leetcode·链表·职场和发展·list
北i1 小时前
TiDB 关联子查询去关联优化实战案例与原理深度解析
java·数据库·sql·tidb
Kuo-Teng1 小时前
LeetCode 21: Merge Two Sorted Lists
java·算法·leetcode·链表·职场和发展
我命由我123451 小时前
Java 开发 - 粘包处理器 - 基于消息头 + 消息体(魔数验证、长度验证)
java·网络·后端·网络协议·java-ee·intellij-idea·intellij idea