You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中为何const变量x无法赋值给constexpr类型的变量c2?

问题分析

首先贴出完整代码片段:

const double x = 65;
constexpr double x1 = 65;
const char x2 = 'A1';

// 合法
constexpr char c1 = x1;
constexpr double c3 = x2;

// 非法 
constexpr char c2 = x;

核心原因

constexpr变量要求初始化值必须是编译期可确定的常量表达式,三个赋值操作的合法性差异本质是等号右侧的变量是否符合「编译期常量」的要求:

  • 关于非法的constexpr char c2 = x:
    x是const double类型,C++标准中只有用常量表达式初始化的const整型/枚举类型,才能被当作编译期常量使用。浮点类型的const变量即使初始值是字面量,也不具备编译期常量属性,无法作为constexpr变量的初始化值,因此该语句非法。
  • 关于合法的constexpr char c1 = x1:
    x1本身是constexpr修饰的变量,它的值在编译阶段就已经固定,天然满足常量表达式要求,因此可以用来初始化constexpr变量。
  • 关于合法的constexpr double c3 = x2:
    x2是const char类型,属于整型范畴,且初始值是字面量常量表达式,符合const整型可作为编译期常量的规则,因此它的值编译期可确定,可以用来初始化constexpr变量。
    补充说明:x2的初始化值'A1'属于多字符字面量,实际取值由编译器实现定义,但这一点不影响它属于编译期常量的属性,因此不会破坏x2的常量性。

内容的提问来源于stack exchange,提问作者Jitu DeRaps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:54:05