【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

最近正在復習+學習C++(查漏補缺ing)。記錄一下學習所得。希望能將所學都整理成一系列的筆記和博客。優先記錄到自己的筆記中,有空就搬運到博客。

學習參考網站:learncpp 7.1-7.12

這次學習的內容是:作用域、持續時間和鏈接。這三個概念和變量或標識符(包含變量、類型和函數)有著密切的關系。

1. 作用域(scope)

主要用來指明變量起作用的范圍。
作用域主要有兩類:塊作用域(局部作用域)文件作用域(全局作用域)

  • 塊作用域:標識符只在當前所在的塊中可見。例如局部變量、函數參數、在塊內聲明的程序定義的類型定義(例如枚舉和類)。
  • 文件作用域:標識符在當前所在文件的整個范圍內都可見。例如全局變量、函數、在命名空間內或全局范圍內聲明的程序定義的類型定義(例如枚舉和類)

2. 持續時間 (duration)

持續時間(duration)(不知道這個的專業術語叫什么,目前都先叫持續時間。)指的是變量創建到銷毀的整個持續時間

持續時間可以分為三類:自動持續時間靜態持續時間動態持續時間.

  • 自動持續時間:變量從聲明時創建,到當前塊的末尾銷毀。例如函數形參,局部變量。
  • 靜態持續時間:變量從程序開始時創建,一直到程序結束時銷毀。例如全局變量、靜態局部變量。
  • 動態持續時間:變量由程序員決定創建和銷毀。例如動態分配的變量。

不同的持續時間也可以表現出不同類型的變量的一個生命周期。

3. 鏈接(linkage)

鏈接用于標識當前標識符(變量、類型或函數)是否可以在其他文件中可見。

鏈接有三種:無鏈接內部鏈接外部鏈接

  • 無鏈接:表明該標識符獨一無二,不會被鏈接使用。例如局部變量、在塊內聲明的程序定義的類型標識符(例如枚舉和類)。
  • 內部鏈接:表明該標識符只會在當前文件中使用,其他文件中無法訪問該標識符。例如靜態全局變量(已初始化或未初始化)、靜態函數、全局變量、未命名的命名空間及其中定義的任何內容。
  • 外部鏈接:表明該標識符會在其他文件中使用。例如非靜態函數、非常量全局變量(已初始化或未初始化)、全局變量、內聯 const 全局變量、命名空間。

4. 總結

類型例子作用域持續時間鏈接筆記
局部變量int x;塊作用域自動持續時間無鏈接
靜態局部變量static int s_x;塊作用域靜態持續時間無鏈接
動態局部變量int* x { new int{} };塊作用域動態持續時間無鏈接
函數參數void foo(int x);塊作用域自動持續時間無鏈接
內部 non-const 全局變量static int g_x;文件作用域靜態持續時間內部鏈接可以已初始化或未初始化
外部 non-const 全局變量int g_x;文件作用域靜態持續時間外部鏈接可以已初始化或未初始化
內聯 non-const 全局變量 (C++17)inline int g_x;文件作用域靜態持續時間外部鏈接可以已初始化或未初始化
內部常量全局變量constexpr int g_x { 1 };文件作用域靜態持續時間內部鏈接必須初始化
外部常量全局變量extern const int g_x { 1 };文件作用域靜態持續時間外部鏈接必須初始化
內聯常量全局變量 (C++17)inline constexpr int g_x { 1 };文件作用域靜態持續時間外部鏈接必須初始化

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

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

相關文章

Yarn的安裝及環境配置

### Yarn 安裝教程及環境配置步驟 #### 1. 檢查 Node.js 是否已安裝 在安裝 Yarn 前,需確認系統中已經安裝了 Node.js。可以通過以下命令驗證其是否存在并獲取版本號: bash node -v 如果未安裝,則需要先完成 Node.js 的安裝。 --- #### 2…

day2-小白學習JAVA---java第一個程序

java第一個程序 1、新建一個文件,以.java為結尾2、用編輯器打開后寫入代碼(本人寫前端,所以用vscode,也可用其他)3、編譯文件4、運行文件5、HelloWorld代碼解釋6、文檔注釋 1、新建一個文件,以.java為結尾 …

docker部署springboot(eureka server)項目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

解讀《人工智能指數報告 2025》:洞察 AI 發展新態勢

美國斯坦福大學 “以人為本人工智能研究院”&#xff08;HAI&#xff09;近日發布的第八版《人工智能指數報告》&#xff08;AI Index Report 2025&#xff09;備受全球矚目。自 2017 年首次發布以來&#xff0c;該報告一直為政策制定者、研究人員、企業高管和公眾提供準確、嚴…

OpenGauss 數據庫介紹

OpenGauss 數據庫介紹 OpenGauss 是華為基于 PostgreSQL 開發的企業級開源關系型數據庫&#xff0c;現已成為開放原子開源基金會的項目。以下是 OpenGauss 的詳細介紹&#xff1a; 一 核心特性 1.1 架構設計亮點 特性說明優勢多核并行NUMA感知架構充分利用現代CPU多核性能行…

使用Trae CN分析項目架構

架構分析后的截圖 A區是打開的項目、B區是源碼區、C區是AI給出當前項目的架構分析結果。 如何用 Trae CN 快速學習 STM32 嵌入式項目架構 在嵌入式開發領域&#xff0c;快速理解現有項目的架構是一項關鍵技能。Trae CN 作為一款強大的分析工具&#xff0c;能幫助開發者高效剖…

MCP協議量子加密實踐:基于QKD的下一代安全通信(2025深度解析版)

一、量子計算威脅的范式轉移與MCP協議改造必要性 1.1 傳統加密體系的崩塌時間表 根據IBM 2025年量子威脅評估報告&#xff0c;當量子計算機達到4000個邏輯量子比特時&#xff08;預計2028年實現&#xff09;&#xff0c;現有非對稱加密體系將在72小時內被完全破解。工業物聯網…

STM32單片機入門學習——第40節: [11-5] 硬件SPI讀寫W25Q64

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.04.18 STM32開發板學習——第一節&#xff1a; [1-1]課程簡介第40節: [11-5] 硬件SPI讀…

Model Context Protocol (MCP) 開放協議對醫療多模態數據整合的分析路徑【附代碼】

Model Context Protocol (MCP) 作為一種革命性的開放協議,正在重塑醫療領域多模態數據整合的方式。本文將深入分析MCP協議在醫療多模態數據整合中的具體路徑、技術實現、應用場景及未來發展方向,揭示這一協議如何成為連接AI與醫療數據的關鍵橋梁。 MCP協議概述及其在醫療多模…

刀片服務器的散熱構造方式

刀片服務器的散熱構造是其高密度、高性能設計的核心挑戰之一。其散熱系統需在有限空間內高效處理多個刀片模塊產生的集中熱量,同時兼顧能耗、噪音和可靠性。以下從模塊化架構、核心散熱技術、典型方案對比、廠商差異及未來趨勢等方面展開分析: 一、模塊化散熱架構 刀片服務器…

java 排序算法-快速排序

快速排序&#xff08;Quick Sort&#xff09;是一種高效的排序算法&#xff0c;它使用分治法&#xff08;Divide and Conquer&#xff09;策略來把一個序列分為較小和較大的兩個子序列&#xff0c;然后遞歸地排序兩個子序列。 快速排序算法的基本思想&#xff1a; 選擇基準值&…

Linux工具學習之【vim】

&#x1f4d6;vim 基本用法 要想學會 vim 先要學會進入與退出它 &#x1f4c3;進入 vim 首先要保證自己的 Linux 中已經安裝好了 vim &#xff08;云服務器大多數都是出廠就安裝好了&#xff09;&#xff0c;如果沒有安裝&#xff0c;需要在 root 用戶下通過指令 yum instal…

win11系統截圖的幾種方式

在 Windows 11 中&#xff0c;系統內置的截圖功能已全面升級&#xff0c;不僅支持多種截圖模式&#xff0c;還整合了錄屏、OCR 文字識別和 AI 增強編輯等功能。以下是從基礎操作到高階技巧的完整指南&#xff1a; 一、快捷鍵截圖&#xff08;效率首選&#xff09; 1. Win Sh…

寫論文時降AIGC和降重的一些注意事項

‘ 寫一些研究成果&#xff0c;英文不是很好&#xff0c;用有道翻譯過來句子很簡單&#xff0c;句型很單一。那么你會考慮用ai嗎&#xff1f; 如果語句太正式&#xff0c;高級&#xff0c;會被誤判成aigc &#xff0c;慎重選擇ai潤色。 有的話就算沒有用ai生成&#xff0c;但…

Java學習手冊:Java并發編程最佳實踐

在Java并發編程中&#xff0c;遵循最佳實踐可以顯著提高程序的性能、可靠性和可維護性。本文將總結Java并發編程中的關鍵最佳實踐&#xff0c;幫助開發者避免常見陷阱并編寫高效的并發程序。 1. 選擇合適的并發工具 Java提供了豐富的并發工具&#xff0c;選擇合適的工具可以簡…

天梯賽DFS合集

1.DFS特殊輸入&#xff1a;PTA | 程序設計類實驗輔助教學平臺 這題其他還是蠻容易&#xff0c;直接用遞歸即可&#xff0c;問題在于怎么輸入&#xff0c;其實可以在遞歸到底層時輸入即可&#xff0c;也就是邊遞歸邊輸入&#xff0c;另外提一嘴跟這個題沒什么關系的點&#xff…

使用Pydantic優雅處理幾何數據結構 - 前端輸入驗證實踐

使用Pydantic優雅處理幾何數據結構 - 前端輸入驗證實踐 一、應用場景解析 在視頻分析類項目中&#xff0c;前端常需要傳遞幾何坐標數據。例如智能安防系統中&#xff0c;需要接收&#xff1a; 視頻流地址&#xff08;rtsp_video&#xff09;檢測區域坐標點&#xff08;point…

智譜AI大模型免費開放:開啟AI創作新時代

文章摘要&#xff1a;近日&#xff0c;國內領先的人工智能公司智譜AI宣布旗下多款大模型服務免費開放&#xff0c;這一舉措標志著大模型技術正式邁入普惠階段。本文將詳細介紹智譜AI此次開放的GLM-4 等大模型&#xff0c;涵蓋其主要功能、技術特點、使用步驟以及應用場景&#…

JMeter中設置HTTPS請求

在JMeter中設置HTTPS請求&#xff0c;你可以按照以下步驟進行操作&#xff1a; 步驟一&#xff1a;添加線程組 打開JMeter后&#xff0c;右鍵點擊“測試計劃”&#xff0c;選擇“添加” -> “線程&#xff08;用戶&#xff09;” -> “線程組”。線程組用于定義虛擬用戶…

線程池七個參數的含義

Java中的線程池里七個參數的以及其各自的含義 面試題&#xff1a;說一下線程池七個參數的含義&#xff1f; 所謂的線程池的 7 大參數是指&#xff0c;在使用 ThreadPoolExecutor 創建線程池時所設置的 7 個參數&#xff0c;如以下源碼所示&#xff1a; public ThreadPoolExe…