日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

探索 C++20 的新領域:深入理解 static 關鍵字和核心語言特性測試宏

來源: 責編: 時間:2023-11-21 09:39:15 263觀看
導讀static 關鍵字(1) static 的多種用途在 C++ 中,static 關鍵字有幾種看似無關的用途。為該關鍵字“過載”部分動機是為了避免在語言中引入新的關鍵字。(2) static 數據成員和方法你可以聲明類的 static 數據成員和方法

static 關鍵字

(1) static 的多種用途kma28資訊網——每日最新資訊28at.com

在 C++ 中,static 關鍵字有幾種看似無關的用途。為該關鍵字“過載”部分動機是為了避免在語言中引入新的關鍵字。kma28資訊網——每日最新資訊28at.com

(2) static 數據成員和方法kma28資訊網——每日最新資訊28at.com

你可以聲明類的 static 數據成員和方法。與非靜態數據成員不同,static 數據成員不是每個對象的一部分。相反,數據成員的只有一份副本,存在于該類的任何對象之外。static 方法同樣處于類級別而不是對象級別。static 方法不在特定對象的上下文中執行;因此,它沒有隱式的 this 指針。這也意味著 static 方法不能被標記為 const。kma28資訊網——每日最新資訊28at.com

kma28資訊網——每日最新資訊28at.com

static 鏈接

(1) 鏈接的概念kma28資訊網——每日最新資訊28at.com

在涉及 static 關鍵字用于鏈接之前,需要理解 C++ 中鏈接的概念。C++ 源文件是獨立編譯的,編譯后的對象文件被鏈接在一起。kma28資訊網——每日最新資訊28at.com

C++ 源文件中的每個名稱(包括函數和全局變量)都有一個鏈接性,可以是外部的(external)或內部的(internal)。外部鏈接意味著該名稱可以從其他源文件訪問。內部鏈接(也稱為靜態鏈接)則意味著不可以。默認情況下,函數和全局變量具有外部鏈接。然而,可以通過在聲明前加上 static 關鍵字來指定內部(或靜態)鏈接。kma28資訊網——每日最新資訊28at.com

例如,假設有兩個源文件:FirstFile.cpp 和 AnotherFile.cpp。這是 FirstFile.cpp 的內容:kma28資訊網——每日最新資訊28at.com

void f();int main() {    f();}

這個文件為 f() 提供了一個原型,但沒有顯示定義。而這是 AnotherFile.cpp:kma28資訊網——每日最新資訊28at.com

import <iostream>;void f();void f() {    std::cout << "f/n";}

這個文件為 f() 提供了原型和定義。請注意,在兩個不同的文件中為同一函數編寫原型是合法的。如果你將原型放在頭文件中,然后在每個源文件中 #include 該頭文件,這正是預處理器為你做的事情。kma28資訊網——每日最新資訊28at.com

每個源文件都能無錯誤地編譯,并且程序鏈接正常:因為 f 具有外部鏈接,main() 可以從不同的文件調用它。然而,假設你在 AnotherFile.cpp 中的 f() 原型上應用 static。kma28資訊網——每日最新資訊28at.com

請注意,你不需要在 f() 定義前重復 static 關鍵字。只要它出現在函數名稱的第一個實例之前,就無需重復。kma28資訊網——每日最新資訊28at.com

import <iostream>;static void f();void f() {    std::cout << "f/n";}

現在每個源文件仍然可以無錯誤地編譯,但鏈接步驟失敗,因為 f() 具有內部(靜態)鏈接,使其無法從 FirstFile.cpp 訪問。某些編譯器在靜態方法被定義但未在該源文件中使用時會發出警告(暗示它們不應該是靜態的,因為它們可能在其他地方使用)。kma28資訊網——每日最新資訊28at.com

(2) 使用匿名命名空間kma28資訊網——每日最新資訊28at.com

用于內部鏈接的 static 的替代方法是使用匿名命名空間。與其將變量或函數標記為 static,不如將其包裝在一個無名命名空間中,如下所示:kma28資訊網——每日最新資訊28at.com

import <iostream>;namespace {    void f();    void f() {        std::cout << "f/n";    }}

匿名命名空間中的實體可以在同一源文件中其聲明之后的任何地方訪問,但不能從其他源文件訪問。這些語義與使用 static 關鍵字獲得的語義相同。kma28資訊網——每日最新資訊28at.com

警告:為了獲得內部鏈接,建議使用匿名命名空間,而不是 static 關鍵字。kma28資訊網——每日最新資訊28at.com

kma28資訊網——每日最新資訊28at.com

拓展內容:核心語言特性的特性測試宏

C++20 添加了特性測試宏,這些宏可用于檢測編譯器支持哪些核心語言特性。所有這些宏都以 __cpp_ 或 __has_cpp_ 開頭。以下是一些示例:kma28資訊網——每日最新資訊28at.com

  • __cpp_range_based_for
  • __cpp_binary_literals
  • __cpp_char8_t
  • __cpp_generic_lambdas
  • __cpp_consteval
  • __cpp_coroutines
  • __has_cpp_attribute(fallthrough)
  • 等等...

這些宏的值是一個數字,代表添加或更新特定特性的月份和年份,格式為 YYYYMM。例如,__has_cpp_attribute(nodiscard) 的值可以是 201603(即 2016 年 3 月,[[nodiscard]] 屬性首次引入的日期),或者是 201907(即 2019 年 7 月,屬性更新以允許指定原因,如 [[nodiscard("Reason")]])。kma28資訊網——每日最新資訊28at.com

注意:除非你正在編寫非常通用的跨平臺和跨編譯器庫,否則你很少需要這些特性測試宏。kma28資訊網——每日最新資訊28at.com

kma28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-32015-0.html探索 C++20 的新領域:深入理解 static 關鍵字和核心語言特性測試宏

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 為什么Go是后端開發的未來

下一篇: Python自動化辦公實戰:PDF文本提取技巧

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • 2023 年的 Node.js 生態系統

    隨著技術的不斷演進和創新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態系統,可以幫助開發人員更快地實現復雜的應用。本文就來看看 Node.js 最新的生
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 萨嘎县| 西城区| 昌平区| 靖远县| 汤阴县| 仁寿县| 盐源县| 新龙县| 东平县| 本溪| 昭苏县| 潢川县| 衢州市| 库尔勒市| 阳东县| 仪征市| 澜沧| 无为县| 湟源县| 南开区| 大同县| 青田县| 余庆县| 怀仁县| 衢州市| 锦州市| 孝感市| 曲麻莱县| 工布江达县| 松潘县| 惠水县| 漯河市| 城口县| 丹棱县| 丽江市| 招远市| 淮南市| 越西县| 同江市| 汪清县| 潞西市|