女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++20 modules入門

程序喵大人 ? 來源:程序喵大人 ? 2023-05-29 15:03 ? 次閱讀

以前一直有了解C++20的新特性,但是因為編譯器對此支持的比較少,所以很少實踐。

近期我才知道MSVC已經全面支持了C++20的新特性,所以打算全部實踐一下,最近在MSVC上跑通了modules,這里分享一下modules的使用方法(注意,以下Case僅適用于MSVC上,估計其它編譯器的使用方式與此有些差異)。

那modules是什么?它有什么作用?

以前C++中想使用外部某個函數或變量需要使用#include來引用頭文件,但include這種做法其實就是把文件的內容原封不動的復制過來,如果一個復雜的頭文件被好多個源文件include,那整個項目的編譯速度也會降低,而且很多時候也會把一些復雜的宏定義引入進來,造成宏污染等等。

而modules就是為了解決這種問題而引入的,它是一種組件思想,一個module編譯一次后,它的結果會被保存在二進制文件中,一個module可以選擇把什么內容暴露給外面使用,剩下的只有內部可見。其它想使用此module的模塊直接使用即可,無需再次編譯,可以重用。最主要的是,使用modules的項目,編譯速度比include的方式快的多,記得之前看過一組測試數據(好像是哪個會議上C++之父貼出來的),modules項目的編譯速度是include的25倍左右。

如果你的項目中已經使用了C++20,真的可以考慮把include方式轉換為modules方式。

在MSVC中怎么使用modules?

我的編譯器是VS2019,經我測試,想要VS中跑通modules需要一些前置條件,比如需要安裝modules相關的環境包,可以在VS installer中安裝:

a0d7dea6-fc7f-11ed-90ce-dac502259ad0.png

其次在自己的項目中,需要把C++標準改為C++20或者C++latest:

a0eabf44-fc7f-11ed-90ce-dac502259ad0.png

還有一點,需要在VS中啟用modules功能:

a0fe31d2-fc7f-11ed-90ce-dac502259ad0.png

這三項都配置后,你應該就可以成功使用modules功能了。

看下我的測試用例:

a106f9de-fc7f-11ed-90ce-dac502259ad0.png

Example.ixx可以理解為是頭文件,它定義了可以對外暴露的接口,后綴名是.ixx,開頭以export module name表示該module的名字是name。

前面加了export的修飾的函數或類表示可以對外暴露,外部可以使用。而module :private; 后面的表示內部的東西,只有內部可見和使用,外部不能使用,比如Example.ixx中的PrivateFunc,如果外部使用,編譯時就會報錯。

模塊接口文件的后綴名一般是.ixx,實現接口的文件后綴名和原來的C++一樣,還是.cpp。

看我的Example.cpp,第一行中的module Example,表示在module Example空間,自然而然可以訪問到Example module中的內容,這里你也可以看的到,里面定義了ixx中聲明的接口。

那import std.core; 是什么作用?

import表示導入xxx模塊,import后就可以使用對應模塊的功能,比如想要使用std::cout,那就需要import std.core。

那我們以前使用的那些標準庫的函數,都對應什么module?

在MSVC中是這樣:

std.regex提供頭文件的內容

std.filesystem提供頭文件的內容

std.memory提供頭文件的內容

std.threading提供了頭文件的內容

除此之外的功能都由std.core提供。

要使用某些模塊,直接添加import聲明即可:

import std.filesystem;
import std.core;

再看下我的main函數所在的測試文件:

a122e61c-fc7f-11ed-90ce-dac502259ad0.png

想要使用Example module中export出的功能,直接import Example即可,剩下的使用方式和以前類似。

介紹到這里,大家就可以在VS中寫一個modules的Demo了。

動手去吧,不要成為學習高手,要成為實戰高手。

更多內容在一個優質的C++學習圈里,來一起鉆研C++和Rust吧。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 二進制
    +關注

    關注

    2

    文章

    803

    瀏覽量

    42145
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74774
  • 編譯器
    +關注

    關注

    1

    文章

    1654

    瀏覽量

    49886
  • Modules
    +關注

    關注

    0

    文章

    10

    瀏覽量

    8089

原文標題:C++20 modules入門

文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C++20新特性解析

    C++之父都說過,C++20C++語言的一次重大變革,引入了大量的新特性。
    發表于 10-08 09:07 ?2294次閱讀

    在MSVC中怎么使用modules

    以前一直有了解C++20的新特性,但是因為編譯器對此支持的比較少,所以很少實踐。
    發表于 06-15 11:37 ?614次閱讀
    在MSVC中怎么使用<b class='flag-5'>modules</b>?

    C語言基礎入門(20) signed #編程入門 #C語言 #c語言入門到精通 #程序猿 #硬聲創作季

    C語言編程語言c語言入門
    fly
    發布于 :2022年08月26日 07:16:57

    STM32CubeIDE不支持C++20語法嗎?

    我正在使用 STM32CubeIDE 編寫 C++ 代碼。IDE 的版本是 1.11.0,它帶有 arm-none-eabi-g++ 版本 10.3-2021.10。編譯器具有一些 C++20 功能
    發表于 02-02 06:51

    Agilent Genesys Modules and Bu

    Genesys may be purchased as the W1410L Genesys Core environment plus a series of individual modules
    發表于 08-13 10:23 ?31次下載

    C++ 入門自學教程

    C++ 入門自學教程從入門知識開始講起,比較有利于初學者入門掌握,比較好懂,能夠對C++有一個全面認識
    發表于 11-17 10:36 ?0次下載

    C語言入門教程

    很好的C語言入門教程,可以肯定的說這個教程只是為初學或入門者準備的
    發表于 01-22 14:46 ?9次下載

    c語言入門書籍推薦

    本文主要介紹c語言入門書籍,首先講解了C語言的優點,其次詳細的推薦了幾款適合C語言入門的書籍。
    的頭像 發表于 04-13 09:52 ?7w次閱讀

    編程入門先學什么?c++語言入門大神先帶你入這個群感受一二

    C++經過多年發展,從C++98到C++03,再到C++11-》C++14-》C++17以及最新
    的頭像 發表于 09-11 09:58 ?2009次閱讀

    2020年底將正式發布C++20

    9月4日,C++ 20的國際標準草案投票結束,而且獲得了全票通過。這意味著C++ 20已完成最終的技術審批,并已完成ISO投票,我們希望在完成最后一輪ISO編輯工作之后,2020年底將
    的頭像 發表于 09-22 14:28 ?3244次閱讀

    關于C++ 20協程最全面詳解

    花了一兩周的時間后,我想寫寫 C++20 協程的基本用法,因為 C++ 的協程讓我感到很奇怪,寫一個協程程序十分費勁。讓我們拋去復雜的東西,來看看寫一個 C++ 協程需要哪些東西。
    的頭像 發表于 04-12 11:10 ?1.3w次閱讀
    關于<b class='flag-5'>C</b>++ <b class='flag-5'>20</b>協程最全面詳解

    現代C++20實戰手冊

    追其根源,C++ 為何如此受歡迎,除了它本身出色的性能,作為一種高級面向對象語言,適用領域極其廣泛,小到嵌入式,大到分布式服務器,到處可以見到 C++ 的身影;另一個很重要的原因就是它“最近”不斷發布具有有趣功能的新語言標準,也就是 C
    的頭像 發表于 01-17 09:55 ?3929次閱讀

    C++20 modules基礎知識入門

    以前一直有了解C++20的新特性,但是因為編譯器對此支持的比較少,所以很少實踐。
    的頭像 發表于 06-15 11:37 ?1165次閱讀
    <b class='flag-5'>C++20</b> <b class='flag-5'>modules</b>基礎知識<b class='flag-5'>入門</b>

    C++98到C++26,經歷了什么?

    上個月,C++26時間表發布,將會在“并發和并行性方面有重大改進”。而已經推出的C++ 23版本則沿襲了C++17的傳統特征,完善了現有特性。但是,與C++ 98、
    的頭像 發表于 08-09 16:01 ?1380次閱讀
    從<b class='flag-5'>C</b>++98到<b class='flag-5'>C</b>++26,經歷了什么?

    C++20無棧協程超輕量高性能異步庫開發實戰

    c++20出來有一段時間了。其中一大功能就是終于支持協程了(c++作為行業大哥大級別的語言,居然到C++20才開始支持協程,我也是無力吐槽了,讓多少人等了多少年,等了多少青春)但千呼萬喚他終于還是
    的頭像 發表于 11-09 10:20 ?1907次閱讀