国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++20語(yǔ)言核心特性的變化

這篇具有很好參考價(jià)值的文章主要介紹了C++20語(yǔ)言核心特性的變化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

using for Enumeration Values

??對(duì)比一下C++20前后的區(qū)別:

enum class State {
    open,
    progress,
    done = 9
};
// Before C++20
void print(State s) {
    switch (s) {
        case State::open:
            std::cout << "open\n";
            break;
        case State::done:
            std::cout << "done\n";
            break;
        case State::progress:
            std::cout << "progress\n";
            break;
        default:
            assert(nullptr);
    }
}
// Since C++20
void print1(State s) {
    using enum State;
    switch (s) {
        case open:
            std::cout << "open\n";
            break;
        case done:
            std::cout << "done\n";
            break;
        case progress:
            std::cout << "progress\n";
            break;
        default:
            assert(nullptr);
    }
}

void print2(State s) {
    using State::open, State::done, State::progress;
    switch (s) {
        case open:
            std::cout << "open\n";
            break;
        case done:
            std::cout << "done\n";
            break;
        case progress:
            std::cout << "progress\n";
            break;
        default:
            assert(nullptr);
    }
}

?

Range-Based for Loop with Initialization

??基于范圍的for循環(huán)是C++11引入的新特性,自C++20起,基于范圍循環(huán)也可以進(jìn)行初始化。

int main() {
    std::vector v{1, 2, 3};
    for (int i{1}; const auto& item : v)
        std::cout << std::format("{}: {}\n", i++, item);
}

?

Feature Test Macros

??特性測(cè)試宏,正如其名,是為了當(dāng)前版本編譯器是否支持某個(gè)語(yǔ)言特性。這個(gè)宏以__cpp為前綴。

#if __cpp_generic_lambdas >= 201707
    // generic lambdas with template parameters can be used
#endif

#ifndef __cpp_lib_as_const
template <typename T>
const T& as_const(T& t) {
    return t;
}
#endif

?

Attribute [[no_unique_address]]

#include <iostream>

struct Empty {};

struct I {
    int i;
};

struct S {
    Empty e;
    int i;
};

int main() {
    std::cout << "sizeof(Empty): " << sizeof(Empty) << '\n';
    std::cout << "sizeof(I): " << sizeof(I) << '\n';
    std::cout << "sizeof(S): " << sizeof(S) << '\n';
}

??空類為了區(qū)分不同對(duì)象的地址,字節(jié)大小是1;而結(jié)構(gòu)體S由于內(nèi)存對(duì)齊的原因,所以字節(jié)大小是8。輸出結(jié)果毫無(wú)疑問(wèn)是1,4,8。

#include <iostream>

struct Empty {};

// EBCO
struct S : Empty {
    int i;
};

// no_unique_address
struct S2 {
    [[no_unique_address]] Empty e;
    int i;
};

int main() {
    std::cout << "sizeof(Empty): " << sizeof(Empty) << '\n';
    std::cout << "sizeof(S): " << sizeof(S) << '\n';
    std::cout << "sizeof(S2): " << sizeof(S2) << '\n';
}

??注解標(biāo)簽no_unique_address能起到和空基類優(yōu)化相同的效果。

?

Attributes [[likely]] and [[unlikely]]

??在if/else,switch分支當(dāng)中都可以使用,幫助編譯器作分支預(yù)測(cè)的優(yōu)化。

int f(int n) {
    if (n <= 0) [[unlikely]] {
        return n;
    } else {
        return n * n;
    }
}

int g(int n) {
    if (n <= 0) {
        return n;
    } else [[likely]] {
        return n * n;
    }
}

int h(int n) {
    switch (n) {
        case 1:
            //
            break;
        [[likely]] case 2:
            // 
            break;
    }

    return 0;
}

?

Attribute [[nodiscard]] with Parameter

??nodiscard用于修飾函數(shù),當(dāng)被修飾的函數(shù)發(fā)生調(diào)用(僅僅調(diào)用而不作賦值或者強(qiáng)制轉(zhuǎn)換操作),編譯器會(huì)報(bào)警告信息。

[[nodiscard]]
int f(int n) {
    return n;
}

int main() {
    f(1); // Warning
    int n = f(1); // OK
    reinterpret_cast<int *>(f(1)); // OK
}

?

New Character Type char8_t

    using namespace std::literals;

    auto c = u8'c'; // char8_t
    auto s = u8"Hello World"; // const char8_t *
    auto str1 = u8"Hello World"s; // std::u8string
    auto str2 = u8"Hello World"sv; // std::u8string_view

    std::cout << u8'c' << '\n'; // OK in C++17, error in C++20
    std::cout << u8"Hello World\n"; // OK in C++17, error in C++20
    std::cout << u8"Hello World\n"s; // OK in C++17, error in C++20
    std::cout << u8"Hello World\n"sv; // OK in C++17, error in C++20

    std::cout << c << '\n'; // OK in C++17, error in C++20
    std::cout << s << '\n'; // OK in C++ 17, error in C++20
    std::cout << str1 << '\n'; // OK in C++17, error in C++20
    std::cout << str2 << '\n'; // OK in C++17, error in C++20

??更多的介紹將在下次帶來(lái),感謝支持??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-747593.html

到了這里,關(guān)于C++20語(yǔ)言核心特性的變化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • CLickhouse核心特性

    目錄 CLickhouse核心特性 1 完備的DBMS功能 2 列式存儲(chǔ)與數(shù)據(jù)壓縮 3 向量化執(zhí)行引擎 4 關(guān)系模型與SQL查詢 5 多樣化的表引擎 6 多線程與分布式 7 多主架構(gòu) 8 在線查詢 9 數(shù)據(jù)分片與分布式查詢 Clickhouse適用場(chǎng)景 Clickhouse不適用場(chǎng)景 Clickhouse名稱含義 1 完備的DBMS功能 具備dbms(數(shù)據(jù)庫(kù)管理

    2024年02月13日
    瀏覽(18)
  • Spark新特性與核心概念

    Spark新特性與核心概念

    一、Sparkshuffle ? ? ? ? (1)Map和Reduce ? ? ? ? 在shuffle過(guò)程中,提供數(shù)據(jù)的稱之為Map端(Shuffle Write),接受數(shù)據(jù)的稱之為Redeuce端(Shuffle Read),在Spark的兩個(gè)階段中,總是前一個(gè)階段產(chǎn)生一批Map提供數(shù)據(jù),下一階段產(chǎn)生一批Reduce接收數(shù)據(jù)。 ? ? ? ? (2)Shuffle管理器 ? ? ?

    2024年02月08日
    瀏覽(18)
  • 【flink番外篇】20、DataStream 和 Table集成-Changelog Streams變化流示例

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識(shí)點(diǎn),并輔以具體的示例進(jìn)行說(shuō)明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關(guān)基礎(chǔ)內(nèi)容。 2、Flink基礎(chǔ)系列 本部分介紹Flink 的基礎(chǔ)部分,比如術(shù)語(yǔ)、架構(gòu)、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年01月25日
    瀏覽(27)
  • Java SE 20 新增特性

    作者:Grey 原文地址: 博客園:Java SE 20 新增特性 CSDN:Java SE 20 新增特性 源倉(cāng)庫(kù): Github:java_new_features 鏡像倉(cāng)庫(kù): GitCode:java_new_features 在Java SE 17 新增特性中,Switch 類型匹配作為預(yù)覽功能推出,到 Java SE 20 ,這個(gè)功能已經(jīng)是第四次預(yù)覽版,在 Java SE 17 中,可以通過(guò)加強(qiáng) switc

    2024年02月02日
    瀏覽(19)
  • 深入解析Zookeeper:核心特性與節(jié)點(diǎn)類型全景剖析

    Zookeeper,作為一個(gè)關(guān)鍵的分布式應(yīng)用協(xié)調(diào)框架,在多節(jié)點(diǎn)協(xié)作和數(shù)據(jù)同步方面發(fā)揮著不可或缺的作用。本文深入剖析了Zookeeper的核心概念,包括其基于內(nèi)存的文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和高效的監(jiān)聽通知機(jī)制。詳細(xì)介紹了Zookeeper的五種節(jié)點(diǎn)類型,包括持久化節(jié)點(diǎn)、持久化順序節(jié)點(diǎn)、臨

    2024年02月02日
    瀏覽(20)
  • C++20新版本特性—編譯時(shí)多態(tài)

    本章介紹如何使用C++進(jìn)行編譯時(shí)多態(tài)機(jī)制,編譯時(shí)多態(tài)相比于運(yùn)行時(shí)多態(tài),會(huì)節(jié)省運(yùn)行時(shí)的開銷。 2.1 函數(shù)重載機(jī)制 在C語(yǔ)言中除了static函數(shù)以外,不支持同名函數(shù),再加上沒(méi)有名稱空間的概念,因此程序員將多個(gè)編譯單元鏈接在一起的時(shí)候,若出現(xiàn)同名函數(shù)將導(dǎo)致鏈接重定義

    2024年01月23日
    瀏覽(17)
  • Node【Node.js 20】新特性

    Node【Node.js 20】新特性

    哈嘍小伙伴們,新的專欄 Node 已開啟;這個(gè)專欄里邊會(huì)收錄一些Node的基礎(chǔ)知識(shí)和項(xiàng)目實(shí)戰(zhàn); Node.js v20.0

    2023年04月26日
    瀏覽(25)
  • C++核心編程—類和對(duì)象,類的三大特性——封裝、繼承、多態(tài)

    C++核心編程—類和對(duì)象,類的三大特性——封裝、繼承、多態(tài)

    縱有疾風(fēng)起,人生不言棄。本文篇幅較長(zhǎng),如有錯(cuò)誤請(qǐng)不吝賜教,感謝支持。 ①什么是對(duì)象? 生活中有各種各樣的 事物 ,如人、動(dòng)物、植物等在C++中將這些稱為對(duì)象。 對(duì)象多種多樣, 各種對(duì)象的屬性也不相同 。 例如狗的品種,毛色,年齡等 各個(gè)對(duì)象都有自己的行為 ,例

    2024年02月07日
    瀏覽(29)
  • Vue面試指南:探索Vue的核心概念和高級(jí)特性1

    1. 什么是Vue.js?它的主要特性是什么? Vue.js 是一個(gè)流行的開源 JavaScript 框架,用于構(gòu)建用戶界面和單頁(yè)應(yīng)用程序(SPA)。由于其易用性、靈活性和輕量級(jí),它在開發(fā)者中非常受歡迎。下面是 Vue.js 的一些主要特性: 響應(yīng)式數(shù)據(jù)綁定 :Vue.js 使用數(shù)據(jù)綁定和視圖層的自動(dòng)更新機(jī)

    2024年02月04日
    瀏覽(21)
  • 掌握C++20的革命性特性:Concepts

    C++20 引入了 Concepts,這是一種用于限制類和函數(shù)模板的模板類型和非類型參數(shù)的命名要求。Concepts 是作為編譯時(shí)評(píng)估的謂詞,用于驗(yàn)證傳遞給模板的模板參數(shù)。Concepts 的主要目的是使模板相關(guān)的編譯器錯(cuò)誤更易于人類閱讀。 我們都遇到過(guò)這樣的情況:當(dāng)為類或函數(shù)模板提供錯(cuò)

    2024年01月20日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包