chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++20 modules入門(mén)

程序喵大人 ? 來(lái)源:程序喵大人 ? 2023-05-29 15:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以前一直有了解C++20的新特性,但是因?yàn)榫幾g器對(duì)此支持的比較少,所以很少實(shí)踐。

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

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

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

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

如果你的項(xiàng)目中已經(jīng)使用了C++20,真的可以考慮把include方式轉(zhuǎn)換為modules方式。

在MSVC中怎么使用modules?

我的編譯器是VS2019,經(jīng)我測(cè)試,想要VS中跑通modules需要一些前置條件,比如需要安裝modules相關(guān)的環(huán)境包,可以在VS installer中安裝:

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

其次在自己的項(xiàng)目中,需要把C++標(biāo)準(zhǔn)改為C++20或者C++latest:

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

還有一點(diǎn),需要在VS中啟用modules功能:

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

這三項(xiàng)都配置后,你應(yīng)該就可以成功使用modules功能了。

看下我的測(cè)試用例:

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

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

前面加了export的修飾的函數(shù)或類(lèi)表示可以對(duì)外暴露,外部可以使用。而module :private; 后面的表示內(nèi)部的東西,只有內(nèi)部可見(jiàn)和使用,外部不能使用,比如Example.ixx中的PrivateFunc,如果外部使用,編譯時(shí)就會(huì)報(bào)錯(cuò)。

模塊接口文件的后綴名一般是.ixx,實(shí)現(xiàn)接口的文件后綴名和原來(lái)的C++一樣,還是.cpp。

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

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

import表示導(dǎo)入xxx模塊,import后就可以使用對(duì)應(yīng)模塊的功能,比如想要使用std::cout,那就需要import std.core。

那我們以前使用的那些標(biāo)準(zhǔn)庫(kù)的函數(shù),都對(duì)應(yīng)什么module?

在MSVC中是這樣:

std.regex提供頭文件的內(nèi)容

std.filesystem提供頭文件的內(nèi)容

std.memory提供頭文件的內(nèi)容

std.threading提供了頭文件、、的內(nèi)容

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

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

import std.filesystem;
import std.core;

再看下我的main函數(shù)所在的測(cè)試文件:

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

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

介紹到這里,大家就可以在VS中寫(xiě)一個(gè)modules的Demo了。

動(dòng)手去吧,不要成為學(xué)習(xí)高手,要成為實(shí)戰(zhàn)高手。

更多內(nèi)容在一個(gè)優(yōu)質(zhì)的C++學(xué)習(xí)圈里,來(lái)一起鉆研C++和Rust吧。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

    42905
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2123

    瀏覽量

    76889
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51242
  • Modules
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    8223

原文標(biāo)題:C++20 modules入門(mén)

文章出處:【微信號(hào):程序喵大人,微信公眾號(hào):程序喵大人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++20新特性解析

    C++之父都說(shuō)過(guò),C++20C++語(yǔ)言的一次重大變革,引入了大量的新特性。
    發(fā)表于 10-08 09:07 ?2790次閱讀

    在MSVC中怎么使用modules?

    以前一直有了解C++20的新特性,但是因?yàn)榫幾g器對(duì)此支持的比較少,所以很少實(shí)踐。
    發(fā)表于 06-15 11:37 ?867次閱讀
    在MSVC中怎么使用<b class='flag-5'>modules</b>?

    STM32CubeIDE不支持C++20語(yǔ)法嗎?

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

    IGBT Modules FUJI Power Semico

    IGBT Modules FUJI Power Semiconductors IGBT Modules:IGBT High Power 6-pack Page 3. IGBT Discretes.
    發(fā)表于 03-14 18:47 ?33次下載

    Agilent Genesys Modules and Bu

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

    C++ 入門(mén)自學(xué)教程

    C++ 入門(mén)自學(xué)教程從入門(mén)知識(shí)開(kāi)始講起,比較有利于初學(xué)者入門(mén)掌握,比較好懂,能夠?qū)?b class='flag-5'>C++有一個(gè)全面認(rèn)識(shí)
    發(fā)表于 11-17 10:36 ?0次下載

    c語(yǔ)言入門(mén)書(shū)籍推薦

    本文主要介紹c語(yǔ)言入門(mén)書(shū)籍,首先講解了C語(yǔ)言的優(yōu)點(diǎn),其次詳細(xì)的推薦了幾款適合C語(yǔ)言入門(mén)的書(shū)籍。
    的頭像 發(fā)表于 04-13 09:52 ?8.7w次閱讀

    編程入門(mén)先學(xué)什么?c++語(yǔ)言入門(mén)大神先帶你入這個(gè)群感受一二

    C++經(jīng)過(guò)多年發(fā)展,從C++98到C++03,再到C++11-》C++14-》C++17以及最新
    的頭像 發(fā)表于 09-11 09:58 ?2201次閱讀

    2020年底將正式發(fā)布C++20

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

    關(guān)于C++ 20協(xié)程最全面詳解

    花了一兩周的時(shí)間后,我想寫(xiě)寫(xiě) C++20 協(xié)程的基本用法,因?yàn)?C++ 的協(xié)程讓我感到很奇怪,寫(xiě)一個(gè)協(xié)程程序十分費(fèi)勁。讓我們拋去復(fù)雜的東西,來(lái)看看寫(xiě)一個(gè) C++ 協(xié)程需要哪些東西。
    的頭像 發(fā)表于 04-12 11:10 ?1.4w次閱讀
    關(guān)于<b class='flag-5'>C</b>++ <b class='flag-5'>20</b>協(xié)程最全面詳解

    現(xiàn)代C++20實(shí)戰(zhàn)手冊(cè)

    追其根源,C++ 為何如此受歡迎,除了它本身出色的性能,作為一種高級(jí)面向?qū)ο笳Z(yǔ)言,適用領(lǐng)域極其廣泛,小到嵌入式,大到分布式服務(wù)器,到處可以見(jiàn)到 C++ 的身影;另一個(gè)很重要的原因就是它“最近”不斷發(fā)布具有有趣功能的新語(yǔ)言標(biāo)準(zhǔn),也就是 C
    的頭像 發(fā)表于 01-17 09:55 ?4839次閱讀

    C++20 modules基礎(chǔ)知識(shí)入門(mén)

    以前一直有了解C++20的新特性,但是因?yàn)榫幾g器對(duì)此支持的比較少,所以很少實(shí)踐。
    的頭像 發(fā)表于 06-15 11:37 ?1732次閱讀
    <b class='flag-5'>C++20</b> <b class='flag-5'>modules</b>基礎(chǔ)知識(shí)<b class='flag-5'>入門(mén)</b>

    C++98到C++26,經(jīng)歷了什么?

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

    C++20無(wú)棧協(xié)程超輕量高性能異步庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)

    c++20出來(lái)有一段時(shí)間了。其中一大功能就是終于支持協(xié)程了(c++作為行業(yè)大哥大級(jí)別的語(yǔ)言,居然到C++20才開(kāi)始支持協(xié)程,我也是無(wú)力吐槽了,讓多少人等了多少年,等了多少青春)但千呼萬(wàn)喚他終于還是
    的頭像 發(fā)表于 11-09 10:20 ?2611次閱讀