最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++17中std::byte的具體使用詳解

 更新時(shí)間:2023年11月27日 13:59:09   作者:fengbingchun  
這篇文章主要為大家詳細(xì)介紹了C++17中std::byte的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

C++17中std::byte的定義如下:std::byte本質(zhì)上代表一個(gè)字節(jié)的值

enum class byte : unsigned char {};

與unsigned char一樣,std::byte可以用來訪問其它對(duì)象(對(duì)象表示)占用的原始內(nèi)存(raw memory),但與unsigned char不同的是,它不是字符類型,也不是算術(shù)類型。std::byte模型只是位的集合,僅支持按位和比較操作。

函數(shù)std::is_integral_v<T>定義如下:判斷T是不是整型,如T為整型,則返回true;如果T的類型為bool、char、char16_t、char32_t、wchar_t、short、int、long、long long,以及任何實(shí)現(xiàn)定義的擴(kuò)展整數(shù)類型(any implementation-defined extended integer types),包括任何有符號(hào)、無符號(hào)、和cv限定的變體(cv-qualified variants),則返回true

template< class T >
inline constexpr bool is_integral_v = is_integral<T>::value;

std::byte相關(guān)函數(shù):

(1).std::to_integer<T>(std::byte):將std::byte對(duì)象轉(zhuǎn)換為整型T,僅當(dāng)is_integral_v<T>為true時(shí)有效;

(2).左移:<<=, 等價(jià)于: b = (std::byte)b << (T)shift; 僅當(dāng)is_integral_v<T(shift)>為true時(shí)有效;

(3).左移:<<,等價(jià)于: std::byte(static_cast<unsigned int>(b) << (T)shift); 僅當(dāng)is_integral_v<T(shift)>為true時(shí)有效;

(4).右移:>>=, 等價(jià)于: b = (std::byte)b >> (T)shift; 僅當(dāng)is_integral_v<T(shift)>為true時(shí)有效;

(5).右移: >>, 等價(jià)于:std::byte(static_cast<unsigned int>(b) >> (T)shift); 僅當(dāng)is_integral_v<T(shift)>為true時(shí)有效;

(6).按位&=、|=、^=:等價(jià)于:l = l & r; l = l | r; l = l ^ r;

(7).按位&、|、^、~:等價(jià)于:std::byte(static_cast<unsigned int>(l) | static_cast<unsigned int>(r));等

注意:

(1).列表初始化(使用花括號(hào)初始化)是唯一可以直接初始化std::byte對(duì)象的方法。

(2).std::byte對(duì)象存儲(chǔ)在棧上。

(3).sizeof(std::byte)的大小總是1.

(4).大多數(shù)時(shí)候std::byte位數(shù)是8,但在有些平臺(tái)上可能不是。

(5).用std::to_integer<>(std::byte)可以把std::byte轉(zhuǎn)換為任意基本整數(shù)類型(bool、字符類型或者整數(shù)類型)。

(6).std::byte沒有定義輸入和輸出運(yùn)算符,因此不得不把它轉(zhuǎn)換為整數(shù)類型再進(jìn)行I/O。

以下為測(cè)試代碼:

namespace {
 
std::ostream& operator<<(std::ostream& os, std::byte b)
{
    return os << std::bitset<8>(std::to_integer<int>(b));
}
 
} // namespace
 
int test_byte()
{
    // 注意:列表初始化(使用花括號(hào)初始化)是唯一可以直接初始化std::byte對(duì)象的方法
    std::byte b{ 66 };
    std::cout << b << "\n"; // 01000010
 
    std::byte b2 = b << 1;
    std::cout << b2 << "\n"; // 10000100
    b <<= 1;
    std::cout << b << "\n"; // 10000100
 
    std::byte b3 = b >> 1;
    std::cout << b3 << "\n"; // 01000010
    b >>= 1;
    std::cout << b << "\n"; // 01000010
 
    std::byte b4 = b | std::byte{ 0b11110000 };
    std::cout << b4 << "\n"; // 11110010
    b |= std::byte{ 0b11110000 };
    std::cout << b << "\n"; // 11110010
 
    b4 = b & std::byte{ 0b11110000 };
    std::cout << b4 << "\n"; // 11110000
    b &= std::byte{ 0b11110000 };
    std::cout << b << "\n"; // 11110000
 
    b4 = b ^ std::byte{ 0b11111111 };
    std::cout << b4 << "\n"; // 00001111
    b ^= std::byte{ 0b11111111 };
    std::cout << b << "\n"; // 00001111
 
    b4 = ~b;
    std::cout << b4 << "\n"; // 11110000
 
    std::byte b5;
    //std::cout << b5 << "\n"; // error: 如果沒有初始化,std::byte對(duì)象的值是未定義的,因?yàn)樗鎯?chǔ)在棧上
 
    std::byte b6{};
    std::cout << b6 << "\n"; // 00000000
 
    std::cout << "sizeof std::byte: " << sizeof(std::byte) << "\n"; // sizeof std::byte: 1
 
    std::byte b7{ 0xFF };
    std::cout << std::to_integer<unsigned int>(b7) << ","
        << std::to_integer<int>(b7) << ","
        << static_cast<int>(std::to_integer<signed char>(b7)) << "\n"; // 255,255,-1
 
    return 0;
}

執(zhí)行結(jié)果如下圖所示:

GitHub:https://github.com/fengbingchun/Messy_Test

到此這篇關(guān)于C++17中std::byte的具體使用詳解的文章就介紹到這了,更多相關(guān)C++17 std::byte內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++合并二叉樹的思路與示例代碼

    C++合并二叉樹的思路與示例代碼

    二叉樹大家應(yīng)該都不陌生,但是合并二叉樹呢?這篇文章主要給大家介紹了關(guān)于C++合并二叉樹的相關(guān)資料,文中給出了兩種解決的方法,大家可以根據(jù)需要選擇對(duì)應(yīng)的方法,需要的朋友可以參考下
    2021-08-08
  • C語言實(shí)現(xiàn)快速排序算法實(shí)例

    C語言實(shí)現(xiàn)快速排序算法實(shí)例

    快速排序時(shí)間復(fù)雜度為O(nlogn),是數(shù)組相關(guān)的題目當(dāng)中經(jīng)常會(huì)用到的算法,下面這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)快速排序算法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 一篇文章帶你了解C語言函數(shù)遞歸

    一篇文章帶你了解C語言函數(shù)遞歸

    這篇文章主要為大家詳細(xì)介紹了C語言函數(shù)遞歸,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言實(shí)現(xiàn)BMP圖像邊緣檢測(cè)處理

    C語言實(shí)現(xiàn)BMP圖像邊緣檢測(cè)處理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)BMP圖像邊緣檢測(cè)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言 bind()函數(shù)案例詳解

    C語言 bind()函數(shù)案例詳解

    這篇文章主要介紹了C語言 bind()函數(shù)案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 如何在C語言中判斷socket是否已經(jīng)斷開

    如何在C語言中判斷socket是否已經(jīng)斷開

    如果不主動(dòng)關(guān)閉socket的話,系統(tǒng)不會(huì)自動(dòng)關(guān)閉的,除非當(dāng)前進(jìn)程掛掉了,操作系統(tǒng)把占用的socket回收了才會(huì)關(guān)閉。小編今天跟大家簡(jiǎn)單介紹下如何在C語言中判斷socket是否已經(jīng)斷開
    2019-05-05
  • Qt獲取git版本信息的具體方法

    Qt獲取git版本信息的具體方法

    這篇文章主要介紹了Qt獲取git版本信息的具體方法,今天又碰到這個(gè)問題了,想根據(jù)具體的git版本信息做代碼問題確認(rèn),文中有詳細(xì)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • 關(guān)于C語言操作符的那些事(超級(jí)全)

    關(guān)于C語言操作符的那些事(超級(jí)全)

    這篇文章主要給大家介紹了關(guān)于C語言操作符的那些事兒,c語言的操作符有很多,包括算術(shù)操作符、移位操作符、位操作符、賦值操作符、單目操作符、關(guān)系操作符、邏輯操作符、條件操作符、逗號(hào)表達(dá)式、下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員,需要的朋友可以參考下
    2021-08-08
  • 基于Matlab繪制洛倫茲吸引子相圖

    基于Matlab繪制洛倫茲吸引子相圖

    洛倫茲吸引子(Lorenz attractor)是由MIT大學(xué)的氣象學(xué)家Edward Lorenz在1963年給出的。本文將利用Matlab實(shí)現(xiàn)洛倫茲吸引子相圖的繪制,感興趣的可以了解一下
    2022-04-04
  • C語言實(shí)現(xiàn)掃雷小項(xiàng)目

    C語言實(shí)現(xiàn)掃雷小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論

台南市| 武威市| 香格里拉县| 水富县| 日喀则市| 河北区| 塔河县| 西华县| 益阳市| 洛隆县| 安图县| 屏南县| 筠连县| 宾川县| 布尔津县| 玉田县| 大埔区| 清丰县| 房产| 马鞍山市| 松阳县| 上虞市| 伊金霍洛旗| 通渭县| 历史| 潮安县| 琼结县| 鄱阳县| 乌拉特后旗| 方正县| 大竹县| 曲周县| 江山市| 韶关市| 云林县| 米林县| 安福县| 云南省| 涡阳县| 墨竹工卡县| 哈尔滨市|