【C++基礎】#define vs constexpr:C++ 編譯期常量的雙雄對決(面試高頻考點 + 真題解析)

?在 C++ 面試中,#define與constexpr的對比堪稱 “元老級” 考點 —— 據統計,在 2023-2024 年的 C++ 工程師面試中,該知識點的出現頻率高達 72%,尤其是在字節跳動、騰訊、華為等企業的校招 / 社招中,幾乎是必問內容。?


這兩個語法元素都與 “編譯期常量” 相關,但背后卻代表著 C++ 發展的兩個時代:#define是 C 語言遺留的 “文本替換工具”,而constexpr是 C++11 引入的 “編譯期計算神器”。理解它們的區別與聯系,不僅能應對面試,更能體現你對 C++ 語言進化的深刻理解。?

本文將從基礎語法到底層實現,結合歷年真題,徹底搞懂這對 “冤家” 的前世今生,輕松應對從初級到資深工程師的面試挑戰。?

一、基礎概念:兩個 “常量工具” 的本質區別?

1.1 #define:C 語言時代的 “文本替換機”?

#define是預處理指令,作用是在編譯前的預處理階段進行純文本替換,不涉及類型檢查,也不理解 C++ 語法。

// 基本用法:定義宏常量
#define MAX_SIZE 1024
#define PI 3.1415926// 帶參數的宏(類似函數)
#define SQUARE(x) (x) * (x)
#define MIN(a, b) ((a) < (b) ? (a) : (b))

工作流程:預處理階

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914817.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914817.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914817.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s環境使用Operator部署Seaweedfs集群(上)

作者&#xff1a;閆乾苓 文章目錄前言4.1 前置條件4.2 部署seaweedfs-operator4.3 準備operator鏡像4.4 使用operator部署Seaweedfs集群4.4.1 部署StorageClass4.4.2 使用StorageClass預先創建PV前言 SeaweedFS Operator是一個Kubernetes Operator&#xff0c;用于自動化部署和…

Git CLI高危任意文件寫入漏洞(CVE-2025-48384)PoC已公開

Git CLI&#xff08;命令行界面&#xff09;中存在一個高危漏洞&#xff0c;攻擊者可利用該漏洞在Linux和macOS系統上實現任意文件寫入。目前該漏洞的概念驗證&#xff08;PoC&#xff09;利用代碼已公開。該漏洞編號為CVE-2025-48384&#xff0c;CVSS嚴重性評分為8.1分&#x…

前端開發中關于表單內容的使用和基礎知識

在前邊&#xff0c;我們已經寫過Web前端開發&#xff0c;Web前端開發&#xff0c;萬字詳細博文帶你HTML&#xff0c;CSS快速入門&#xff08;上篇&#xff09;和Web前端開發&#xff0c;一文帶你HTML&#xff0c;CSS快速入門&#xff08;下篇&#xff09;&#xff0c;使用近兩萬…

linux 安裝mysql保姆教程

安裝包下載地址: MySQL :: Download MySQL Community Server (Archived Versions) 解壓到安裝包&#xff1a; tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 創建Mysql用戶組和用戶 groupadd mysql useradd -r -g mysql mysql 編譯安裝并初始化 進入/home/mysql/m…

Android系統的問題分析筆記 - Android上的調試方式 bugreport

在Android開發和系統調試中&#xff0c;bugreport&#xff08;錯誤報告&#xff09; 是一份包含設備詳細系統狀態、運行日志及應用行為的綜合報告&#xff0c;是定位和診斷App崩潰、系統異常、性能問題等的核心工具。無論是開發者排查用戶反饋的問題&#xff0c;還是設備廠商調…

GESP2025年6月認證C++四級( 第三部分編程題(2)排序)

參考程序&#xff1a;#include <cstdio> #include <algorithm> #include <vector> #include <iostream> using namespace std;int main() {int n, ans 0;// 讀取學生人數scanf("%d", &n);// 用 vector 存儲每個學生的身高和體重&#x…

SQL155 大小寫混亂時的篩選統計

SQL155 大小寫混亂時的篩選統計 題目理解 假設我們有一個考試系統數據庫&#xff0c;里面有&#xff1a; exam_record表&#xff1a;記錄學生考試作答情況examination_info表&#xff1a;記錄考試信息&#xff0c;包括每個考試的類別標簽(tag) ?問題描述?&#xff1a; 有…

無人機圖像中的小目標檢測新利器:深入解析 LAM-YOLO 模型

【導讀】 隨著無人機技術的發展&#xff0c;從交通監控到農業測繪&#xff0c;各類任務中對“空中視角下的小目標檢測”需求激增。然而&#xff0c;由于無人機拍攝視角多變、目標尺寸微小、環境光照復雜等因素&#xff0c;傳統檢測模型常常出現“漏檢”“誤檢”問題。 LAM-YO…

Rust 基礎大綱

Rust 基礎大綱1.Summary安裝教材2 Rust 源1.Summary 安裝 https://www.rust-lang.org/zh-CN/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安裝完成后&#xff0c;驗證是否成功 rustc -V cargo -V# 創建項目 cargo new my_project # 編譯項…

PostgreSQL 大數據量(超過50GB)導出方案

1.正常導出導出指定庫./pg_dump -d test_db -p 2360 > /home/softwares/postgresql/test_db.sql導出指定表./pg_dump -p 2360 -U postgres -t test_schema.test_table test_db > /home/softwares/postgresql/m.sql-t參數說明&#xff0c;-t test_schema.test_table test…

終端安全最佳實踐

什么是終端安全&#xff1f;終端安全通過保護組織中的設備的過程&#xff0c;來保護公司網絡免受漏洞和網絡攻擊。主要的任務包括&#xff1a;更新終端補丁、遵循相關安全標準和要求、滿足各種合規性策略設置等等。終端安全和防病毒之間的區別是什么&#xff1f;殺毒軟件可以幫…

【UE4 UE5】UE設置屏幕分辨率 全屏、窗口設置的方法

1.在藍圖中設置如下 設置全屏模式藍圖節點可以選擇全屏或者窗口 2.通過執行控制臺命令設置 注意:"x"是英文字母x w:窗口 f:全屏 3.通過修改項目配置文件設置。 打開 項目路徑\Saved\Config\Windows下的GameUserSettings.ini文件 在文件中進行相應修改 ?…

非控制器(如 Service、工具類)中便捷地獲取當前 HTTP 請求的上下文信息

非控制器&#xff08;如 Service、工具類&#xff09;中便捷地獲取當前 HTTP 請求的上下文信息 在 Spring 框架的 Web 開發中&#xff0c;RequestContextHolder 是一個非常實用的工具類&#xff0c;它的主要作用是在非控制器&#xff08;如 Service、工具類&#xff09;中便捷地…

Excel處理控件Aspose.Cells教程:使用 Python 在 Excel 中創建甘特圖

時間軸上的任務可視化有助于更好地管理項目。本文將學習如何使用Aspose.Cells for Python 通過 .NET在 Excel 中創建甘特圖。只需幾行代碼&#xff0c;即可將簡單的任務數據轉換為動態清晰的可視化時間軸&#xff0c;非常適合用于報表、儀表板和規劃文檔。 Aspose.Cells官方試…

【RK3568 平臺I2C協議與AGS10驅動開發】

RK3568 平臺I2C協議與AGS10驅動開發一、I2C 總線協議基礎二、I2C 通信過程詳解三、AGS10 傳感器概述四、AGS10驅動開發1. 硬件連接2. 設備樹&#xff08;DTS&#xff09;配置3. 內核驅動開發五、調試與驗證六、總結引言在嵌入式系統開發中&#xff0c;傳感器數據采集是常見需求…

arm版本的ubuntu安裝git或者vim等方法

看起來你在基于 ARM 的 Ubuntu 系統上安裝 Vim 時遇到了問題&#xff0c;錯誤提示為“E: 無法定位軟件包 vim”。這通常是因為系統的軟件包列表未更新&#xff0c;或者該軟件包在你檢查的標準軟件源中不可用。以下是通常可以解決這個問題的方法&#xff1a;1. 更新軟件包列表“…

MFC擴展庫BCGControlBar Pro v36.2新版亮點:可視化設計器升級

BCGControlBar庫擁有500多個經過全面設計、測試和充分記錄的MFC擴展類。 我們的組件可以輕松地集成到您的應用程序中&#xff0c;并為您節省數百個開發和調試時間。 BCGControlBar專業版 v36.2已全新發布了&#xff0c;在這個版本中添加了一個新的擴展器控件、改進了網格和報表…

小杰學C(eleven day)——莫道浮云終蔽日,總有云開霧散時。

1.結構體&#xff08;1&#xff09;內容定義&#xff1a;1.用戶自定義的數據類型2.可以包含若干不同數據類型&#xff08;可相同&#xff09;的成員變量3.這些數據項組合起來反應某一信息格式&#xff1a;struct 結構體名 (用戶自定義的數據類型){數據類型 成員變量1;數據類型 …

海豚遠程控制APP:隨時隨地,輕松掌控手機

在快節奏的現代生活中&#xff0c;我們常常需要在不同設備之間切換&#xff0c;管理手機也變得越來越重要。無論是遠程辦公、遠程學習還是日常生活中對手機的管理&#xff0c;一款高效、便捷的遠程控制軟件都能極大地提升我們的效率。海豚遠程控制APP正是這樣一款功能強大的手機…

Linux/Ubuntu安裝go

Linux/Ubuntu安裝go1. 首先移除舊版本&#xff08;如有&#xff09;&#xff1a;2. 下載Go 1.23.9安裝包&#xff1a;3. 解壓到系統目錄&#xff1a;4. 設置環境變量&#xff08;添加到~/.profile或~/.bashrc文件末尾&#xff09;&#xff1a;5.使環境變量生效&#xff1a;6. 驗…