欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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可以用來訪問其它對象(對象表示)占用的原始內(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),包括任何有符號、無符號、和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對象轉(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).列表初始化(使用花括號初始化)是唯一可以直接初始化std::byte對象的方法。

(2).std::byte對象存儲在棧上。

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

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

(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。

以下為測試代碼:

namespace {
 
std::ostream& operator<<(std::ostream& os, std::byte b)
{
    return os << std::bitset<8>(std::to_integer<int>(b));
}
 
} // namespace
 
int test_byte()
{
    // 注意:列表初始化(使用花括號初始化)是唯一可以直接初始化std::byte對象的方法
    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對象的值是未定義的,因?yàn)樗鎯υ跅I?
 
    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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++浮點(diǎn)型的存儲方式詳解

    C++浮點(diǎn)型的存儲方式詳解

    本篇文章是對C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++學(xué)習(xí)之函數(shù)模板的使用詳解

    C++學(xué)習(xí)之函數(shù)模板的使用詳解

    函數(shù)模板可以適用泛型來定義函數(shù),其中泛型可以是(int, double, float)等替換。這篇文章主要來和大家聊聊函數(shù)模板的具體使用,感興趣的可以了解一下
    2023-03-03
  • VC使用編譯時(shí)間作為版本號標(biāo)識的方法

    VC使用編譯時(shí)間作為版本號標(biāo)識的方法

    這篇文章主要介紹了VC使用編譯時(shí)間作為版本號標(biāo)識的方法,需要的朋友可以參考下
    2017-03-03
  • 全排列算法的原理和實(shí)現(xiàn)代碼

    全排列算法的原理和實(shí)現(xiàn)代碼

    這篇文章主要介紹了全排列算法的原理和實(shí)現(xiàn)代碼,全排列是將一組數(shù)按一定順序進(jìn)行排列,如果這組數(shù)有n個(gè),那么全排列數(shù)為n!個(gè),需要的朋友可以參考下
    2014-08-08
  • VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    VisualStudio2022 cmake配置opencv開發(fā)環(huán)境

    本文主要介紹了VisualStudio2022 cmake配置opencv開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 詳解C語言中write函數(shù)

    詳解C語言中write函數(shù)

    write函數(shù),是一個(gè)C語言函數(shù),功能為將數(shù)據(jù)寫入已打開的文件內(nèi),這篇文章主要介紹了C語言中write函數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • c++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Qt實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    Qt實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到xls的示例代碼

    導(dǎo)入導(dǎo)出數(shù)據(jù)到csv由于語法簡單,適用場景有限,于是本文將為大家介紹Qt如何實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)到xls,感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • C++開發(fā)之PugiXML庫基礎(chǔ)用法示例詳解

    C++開發(fā)之PugiXML庫基礎(chǔ)用法示例詳解

    PugiXML庫是一個(gè)功能強(qiáng)大、簡單易用的C++ XML解析庫,它提供了一組方便的函數(shù)來解析、創(chuàng)建和修改XML文檔,本文介紹了如何使用PugiXML庫來解析、創(chuàng)建和修改XML文檔,以及如何處理錯(cuò)誤和異常,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼

    使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼

    這篇文章主要介紹了使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論