const和constexpr详解
前言
constexpr是c++11引入的关键字,其和const都是用来定义常量的,本文将详解两者的区别。
const
const一般用于修饰变量、引用、指针,标记它们为常量。然而,const并未区分编译期常量和运行期常量,只能保证变量运行时不被直接修改。
const变量,其值不能发生改变:
1 | |
const引用,无法通过引用修改变量的值:
1 | |
const引用,不能通过指针修改其所指向的值,但指针本身可以指向其他的地址:
1 | |
指向常量的指针的指向可以发生改变,若要限制指针本身为常量,需要调整const的位置:
1 | |
此外,const还能修饰成员函数,表明该函数不会修改对象的状态(成员变量):
1 | |
constexpr
const并没有区分编译期常量和运行期常量,我们用下面这个例子来说明:
1 | |
编译期程序还没开始运行,只有字面值常量可以确定
运行期所有表达式都能求值
constexpr即constant expression(常量表达式),进一步将修饰的内容限定为编译期常量。
constexpr修饰变量时,编译器能在编译时确定变量值:
1 | |
constexpr修饰函数时,当其参数是constexpr时,函数会生成编译期常量。而使用非constexpr变量调用时,在运行时生成值:
1 | |
非constexpr值,则当做普通函数使用:
1 | |
参考
const和constexpr详解
https://delta0406.github.io/2025/06/06/技术/语言/CPP/const和constexpr详解/