当前位置: 首页 > wzjs >正文

闭站保护期间网站能够打开吗如何做网络推广运营

闭站保护期间网站能够打开吗,如何做网络推广运营,哈尔滨建设网站哪家好,2级域名建独立网站非常棒的问题,这几个关键字(const、constexpr、#define)都可以用来表示“常量”,但它们意义、作用时机和参与编译的方式完全不同,理解这些对掌握 C 编译模型和写出高质量代码非常重要。 我们从用途、语义、生命周期、编…

非常棒的问题,这几个关键字(constconstexpr#define)都可以用来表示“常量”,但它们意义、作用时机和参与编译的方式完全不同,理解这些对掌握 C++ 编译模型和写出高质量代码非常重要。

我们从用途、语义、生命周期、编译阶段、类型检查、作用域、性能优化等维度系统性整理:


✅ 一、先看三者的简要对比

特性/关键词#defineconstconstexpr
类型安全❌(纯文本替换)✅(有类型)✅(有类型,且编译期常量)
编译阶段预处理阶段编译阶段编译阶段(要求常量表达式
编译器可见性❌(对编译器不可见)✅(符号存在)✅(符号存在且常量可折叠)
优化能力差(不利于调试优化)较好最佳
可以取地址✅(在符号表中)✅(但可能折叠为立即数)
支持复杂类型❌(只能是文本)
可用于数组长度✅(C++11起)
常量表达式限制不要求是编译期常量必须是编译期常量表达式

🧩 二、编译器行为层面解释

1. #define:预处理阶段文本替换

#define PI 3.14

🔍 行为:

  • 预处理阶段,编译器会把 所有出现 PI 的地方直接替换为 3.14
  • 编译器看不到 PI 这个标识符,调试器、类型系统也看不到
  • 不参与类型检查、作用域控制

📌 不推荐:

#define SQUARE(x) x * x
int y = SQUARE(1 + 2);  // → 展开为 1 + 2 * 1 + 2 → 错误

2. const:在编译阶段处理的只读变量

const double pi = 3.14;

🔍 行为:

  • pi 是一个具有类型和作用域的符号
  • 编译器会参与类型检查
  • 可以取地址(存在符号表中)
  • 如果优化器看到它不变,可能优化为立即数

📌 示例:

const int N = 10;
int arr[N];  // C++11 起允许

3. constexpr:编译阶段就能求值为常量的表达式

constexpr double pi = 3.14;
constexpr int square(int x) { return x * x; }

🔍 行为:

  • 要求变量或函数在编译期间就能确定值

  • 编译器会强制执行常量折叠(constant folding)

  • 可用于:

    • 数组大小
    • 模板参数
    • 枚举值
    • if constexpr 语句分支
  • 可定义常量表达式函数

📌 示例:

constexpr int N = square(3); // N = 9,在编译期完成计算
int arr[N];                  // 数组大小合法

⚠️ 三者在调试器中的差异

内容类型在调试器中是否可见是否能打断点是否能取地址
#define❌ 不可见(被替换掉)❌ 无法断点
const✅ 可见(有符号名)✅ 可以断点
constexpr⚠️ 可能折叠优化掉❌ 不一定能断点❌ 常常变成立即数

✅ 四、代码层级对比示例

#define LEN 100                     // 无类型,只是 100 的文本替换const int len1 = 100;              // 有类型,支持类型检查,可能折叠
constexpr int len2 = 100;          // 编译期常量,支持最强优化int arr1[LEN];   // ✅
int arr2[len1];  // ✅(C++11 起)
int arr3[len2];  // ✅(优先推荐)

🎓 五、适合用于什么场景?

使用场景推荐选项原因
简单常量替代constexpr类型安全 + 编译期求值 + 优化好
宏函数inline constexpr function避免宏展开错误,可调试
魔法数字、配置参数constexpr or const类型安全、可调试
条件编译(平台相关)#ifdef/#define预处理器语法只在这类场景合法
定义模板参数或数组大小constexpr编译期要求常量

✅ 六、语义分层总结图

       ┌────────────────────────────┐│       #define PI 3.14      │ ← 预处理,替换文本,无类型、无调试信息└────────────────────────────┘↓┌────────────────────────────┐│  const double pi = 3.14;   │ ← 有类型,有符号,有作用域,可调试└────────────────────────────┘↓┌────────────────────────────┐│ constexpr double pi = 3.14;│ ← 编译期常量表达式,最优性能和安全性└────────────────────────────┘

✅ 七、一句话总结

#define 是预处理器的文本替换,完全不参与类型系统;const 是只读变量,具有类型和作用域;constexpr 是编译期可求值的常量表达式,是现代 C++ 推荐的写法,支持最强类型安全与编译优化。

http://www.dtcms.com/wzjs/393883.html

相关文章:

  • 国家摄影网站网上推销产品的软件
  • 手机网站建设需要多少钱在百度上怎么卖自己的产品
  • 杭州学校网站建设凡科建站怎么建网站
  • dedecms win8风格网站模板windows优化大师卸载
  • 论坛网站地图怎么做陕西网页设计
  • 网站建设的方案模板推广渠道怎么写
  • 做动态网站的流程哪里可以学网络运营和推广
  • 领诺科技网站建设站长联盟
  • 网站建设考虑事项市场调研报告模板ppt
  • 用idea做html网站如何制作自己的公司网站
  • 梁平网站建设有哪些搜索引擎
  • 搞一个网站需要多少钱象山关键词seo排名
  • 给平面设计素材网站做素材挣钱吗seo标题优化的心得总结
  • 深圳市龙岗区做网站的公司网页模板大全
  • 企企业业网网站站建建设设凡科建站和华为云哪个好
  • 音乐网站后台模板如何引流推广产品
  • 温州首页网络科技有限公司seo工作内容有哪些
  • 做动态网站难么外贸营销型网站设计
  • 用python做的网站模板搜索引擎优化解释
  • 真人做爰视频网站互联网培训机构排名前十
  • 赣州市规划建设局网站改青岛网站seo
  • 个人想建个网站怎么弄百度搜索量排名
  • 大连网站建设 仟亿西安疫情最新数据消息中高风险地区
  • 怎么在百度做网站站内优化包括哪些
  • 做电商在什么网站吗网络营销公司是做什么的
  • 二百块做网站郑州seo课程
  • 虚拟机中建设iis网站东莞网站建设公司
  • 网络课程教学平台有哪些成都seo工程师
  • 商务网站建设域名备案
  • 手机建网站详细步骤广东云浮疫情最新情况