C++ constexpr和const有什么区别?C++编译期常量使用指南【C++11】

admin 百科 8
constexpr 是编译期常量表达式,const 是运行时不可修改对象;前者必须在编译期求值并用于模板参数、数组大小等场景,后者仅保证初始化后不被修改,值可来自运行时。

C++ constexpr和const有什么区别?C++编译期常量使用指南【C++11】-第1张图片-佛山资讯网

constexprconst 都表示“不可变”,但本质完全不同:前者是**编译期可求值的常量表达式**,后者只是**运行时不可修改的对象**。简单说,const 不一定在编译期知道值,constexpr 一定在编译期就知道值且能参与编译期计算

const:只保证“不修改”,不保证“编译期可知”

const 变量只要求初始化后不能被修改,但它的值可以来自运行时——比如函数返回、用户输入、随机数等。

  • int x = 42; const int a = x; // ✅ 合法,但 a 不是编译期常量
  • const int b = rand(); // ✅ C++11 起允许(只要类型支持),但 b 仍不是编译期常量
  • int arr[a]; // ❌ 错误!a 不是常量表达式,不能用作数组长度

constexpr:强制“编译期可算出”,用途更严格也更强大

constexpr 变量必须用常量表达式初始化;constexpr 函数/构造函数,编译器会尝试在编译期求值(若参数满足条件)。

标签: c++ 区别

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~