自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

別再用 unsigned char 了,std::byte 才是真愛!

開發(fā)
想象一下,如果字節(jié)是一個演員,那么 std::byte 就是一個純粹的表演藝術(shù)家 - 它只專注于做一件事:表示原始的字節(jié)數(shù)據(jù)。

大家好!今天讓我們來聊聊 C++17 中引入的一個有趣的小伙伴 - std::byte!

想象一下,如果字節(jié)是一個演員,那么 std::byte 就是一個純粹的表演藝術(shù)家 - 它只專注于做一件事:表示原始的字節(jié)數(shù)據(jù) ?

#include <cstddef>

enum class byte : unsigned char {};  // 就是這么簡單!

為什么需要 std::byte???

std::byte 與 unsigned char 的關(guān)鍵區(qū)別:

#include <cstddef>

// unsigned char - 可以進行算術(shù)運算 ??
unsigned char old = 42;
old = old + 1;     // 允許,但這對字節(jié)操作來說不合理!

// std::byte - 只允許位運算 ?
std::byte modern{42};
// modern = modern + 1;  // 編譯錯誤!
modern = modern | std::byte{1};  // 正確的位運算方式 ?

本質(zhì)區(qū)別:

  • unsigned char: 被視為數(shù)值類型,允許算術(shù)運算 ??
  • std::byte: 純粹的字節(jié)容器,只支持位運算 ??
  • 這種限制讓代碼更安全、語義更清晰!??

玩轉(zhuǎn) std::byte ??

來看看如何玩轉(zhuǎn)這個字節(jié)小精靈 std::byte 吧! ??

#include <cstddef>
#include <iostream>
#include <bitset>

int main() {
    // 創(chuàng)建一個神秘字節(jié) ??
    std::byte secret{0b101010};  // 二進制魔法,像變魔術(shù)一樣 ?
    
    // 位運算大法 ??
    std::byte mask{0b111000};    // 這是我們的魔法面具
    auto result = secret & mask;  // 變身! ??
    
    // 揭秘時刻! ??
    std::cout << "解密結(jié)果:"
              << std::bitset<8>(std::to_integer<int>(result)) 
              << " ??\n";
}

這段代碼就像在玩魔術(shù) ??:

  • 先準(zhǔn)備一個神秘數(shù)字 ??
  • 用魔法面具(掩碼)來變形 ??
  • 最后揭曉神奇的結(jié)果 ?

就是這么簡單,就像變魔術(shù)一樣有趣! ??

玩轉(zhuǎn)數(shù)字轉(zhuǎn)換 ??

嘿!想把 std::byte 變成數(shù)字嗎?有兩個超酷的魔法咒語 ?:

std::byte magic_byte{42};  // 先來個神秘數(shù)字 ??

// 經(jīng)典魔法 ??♂?
int num1 = std::to_integer<int>(magic_byte);  // 老牌法術(shù),穩(wěn)如泰山!

// 新式魔法 ?
int num2 = std::to_underlying(magic_byte);     // C++23出品,簡單粗暴!

就這么簡單!兩種方法都能把我們的字節(jié)小精靈變成普通數(shù)字 ??

  • to_integer 是老前輩,可靠又穩(wěn)定 ??
  • to_underlying 是新秀,代碼更短,用起來更爽 ??

選哪個?看你心情!反正都能幫你完成任務(wù) ??

位運算大魔法秀 ??

來看看 std::byte 的位運算絕活吧!就像變魔術(shù)一樣神奇 ?:

std::byte b{0b00001111};  // 我們的魔法師 ??

// 左移仙術(shù) ??
b <<= 1;  // 嗖!數(shù)字們向左跑 ??♂?

// 右移神通 ??
b >>= 2;  // 唰!數(shù)字們向右溜 ??♀?

// 三大神器 ??
std::byte mask{0b11110000};  // 魔法面具準(zhǔn)備!
b |= mask;  // 或運算:兩個數(shù)合體 ??
b &= mask;  // 與運算:雙劍合璧 ??
b ^= mask;  // 異或運算:完美變身 ??♂?

就這么簡單!每個運算都像個小魔術(shù) ??,讓字節(jié)變來變?nèi)?,超級好玩!記?。何贿\算就是 std::byte 的獨門絕技 ??!

實戰(zhàn)小案例:玩轉(zhuǎn)權(quán)限控制 ??

來看個超級實用的例子 - 用 std::byte 玩轉(zhuǎn)權(quán)限控制!就像在玩積木一樣簡單 ??

// 權(quán)限小精靈們 ??♂?
enumclass Permissions {
    None = 0,     // 啥也不能干 ??
    Read = 1,     // 可以偷看 ??
    Write = 2,    // 可以寫字 ??
    Execute = 4   // 可以跑起來 ??♂?
};

int main() {
    // 創(chuàng)建一個空權(quán)限盒子 ??
    std::byte permissions{0};
    
    // 往盒子里放入權(quán)限 ??
    permissions |= std::byte{static_cast<unsignedchar>(Permissions::Read)};   // 放入讀權(quán)限
    permissions |= std::byte{static_cast<unsignedchar>(Permissions::Write)};  // 放入寫權(quán)限
    
    // 偷偷看看有沒有讀權(quán)限 ??
    bool canRead = (permissions & std::byte{static_cast<unsignedchar>(Permissions::Read)}) != std::byte{0};
    std::cout << "能偷看嗎?" << (canRead ? "沒問題!??" : "不行哦~??") << "\n";
}

就是這么簡單! ??

  • 權(quán)限就像積木塊 ??
  • 用 |= 把權(quán)限放進盒子 ??
  • 用 & 來檢查權(quán)限是否存在 ??

一個字節(jié)八個位,就能存八種權(quán)限,超級省空間! ??

記住,std::byte 就像一個專業(yè)的雜技演員 - 它只做位運算這一件事,但是做得非常專業(yè)!這就是它的美,簡單而純粹 ?

字節(jié)數(shù)組操作 - 玩轉(zhuǎn)二進制數(shù)據(jù) ??

來看看如何玩轉(zhuǎn)字節(jié)數(shù)組,就像在玩積木一樣簡單! ??

#include <cstddef>
#include <vector>

int main() {
    // 開一個神奇的百寶箱 ??
    std::vector<std::byte> buffer(4);  // 4個格子的魔法盒子
    
    // 放入寶物 ?
    buffer[0] = std::byte{0xFF};  // 第一格放個滿值 ??
    buffer[1] = std::byte{0x00};  // 第二格放個空值 ???
    
    // 檢查寶物 ??
    for(constauto& b : buffer) {
        std::cout << std::to_integer<int>(b) << " ";  // 一個一個數(shù)數(shù) ??
    }
}

超簡單的三步走 ??:

  • 準(zhǔn)備盒子 ??
  • 放入寶物 ??
  • 查看內(nèi)容 ??

就這么簡單,字節(jié)數(shù)組就被你玩轉(zhuǎn)啦! ??

與其他類型的轉(zhuǎn)換 - 變形記 ??

來看看數(shù)據(jù)類型是如何華麗變身的! ?

#include <cstddef>
#include <cstring>

int main() {
    // 整數(shù)變身魔法 ??
    int number = 12345;                        // 原始數(shù)字 ??
    std::byte bytes[sizeof(int)];              // 準(zhǔn)備魔法容器 ??
    std::memcpy(&bytes, &number, sizeof(int)); // 變身開始! ?
    
    // 變身回來 ??
    int restored;                              // 準(zhǔn)備還原容器 ??
    std::memcpy(&restored, &bytes, sizeof(int)); // 還原魔法 ??
    
    // 見證奇跡的時刻 ??
    std::cout << "變身前: " << number << " ??\n"
              << "變身后: " << restored << " ??\n";
}

就這么簡單! ??

  • memcpy 就是我們的變身魔法棒 ??
  • 字節(jié)數(shù)組就像是數(shù)據(jù)的百變衣柜 ??
  • 想變就變,想換就換,超級方便! ??

記?。哼@種轉(zhuǎn)換就像變魔術(shù)一樣,要小心使用哦! ??

std::byte 使用秘笈 ??

來看看使用 std::byte 的超級小貼士! ??

(1) 初始化有講究 ??

std::byte good{42};     // 完美! 像個魔法師一樣優(yōu)雅 ?
std::byte bad = 42;     // 糟糕! 編譯器會生氣的 ??

(2) 只能位運算哦 ??

std::byte b{0x42};
// b = b + 1;          // 不行!這不是計算器 ??♂?
b |= std::byte{0x01};  // 完美!位運算才是正道 ?

(3) 內(nèi)存小把戲 ??

std::vector<std::byte> magic(1024);  // 開啟魔法空間 ??
std::fill(magic.begin(), magic.end(), std::byte{0});  // 施展清零術(shù) ?

記住: std::byte 就像個純粹的武林高手 ??

  • 只專注位運算 ??
  • 拒絕算術(shù)運算 ??
  • 安全又可靠 ???

就是這么簡單! 一起來玩轉(zhuǎn)字節(jié)世界吧! ??

性能考慮 - 快得飛起 ??

嘿!擔(dān)心 std::byte 會拖慢你的程序嗎?放心啦!它輕得像片羽毛 ??

// 這兩行代碼就是最好的保證書 ??
static_assert(sizeof(std::byte) == 1, "std::byte 必須是1字節(jié)!");    // 大小剛剛好 ??
static_assert(alignof(std::byte) == 1, "std::byte 對齊要求必須是1!"); // 對齊完美 ?

簡單說就是:

  • 體積?。壕鸵粋€字節(jié),比螞蟻還小 ??
  • 零開銷:編譯器直接優(yōu)化,快得像閃電 ?
  • 對齊穩(wěn):不會浪費一丁點內(nèi)存 ??

所以,放心大膽地用吧!它就是性能小超人 ??♂?

總結(jié) ??

std::byte 是現(xiàn)代 C++ 中處理原始字節(jié)數(shù)據(jù)的最佳選擇:

  • 類型安全 ?
  • 語義清晰 ?
  • 零開銷抽象 ?
  • 防止意外的算術(shù)運算 ?

記住:當(dāng)需要處理原始字節(jié)時,std::byte 就是你的最佳拍檔! ??

責(zé)任編輯:趙寧寧 來源: everystep
相關(guān)推薦

2023-10-26 16:33:59

float 布局前段CSS

2020-12-02 11:18:50

print調(diào)試代碼Python

2020-12-04 10:05:00

Pythonprint代碼

2021-06-09 06:41:11

OFFSETLIMIT分頁

2021-05-21 13:10:17

kill -9微服務(wù)Java

2021-01-29 11:05:50

PrintPython代碼

2020-12-03 09:05:38

SQL代碼方案

2020-12-15 08:06:45

waitnotifyCondition

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2022-01-27 07:48:37

虛擬項目Django

2020-07-17 07:15:38

數(shù)據(jù)庫ID代碼

2024-06-12 13:54:37

編程語言字符串代碼

2019-03-12 14:48:29

路由器XBOXPS4

2022-10-27 21:34:28

數(shù)據(jù)庫機器學(xué)習(xí)架構(gòu)

2022-03-10 10:12:04

自動化腳本Bash

2023-09-08 08:35:42

層疊樣式表CSS

2023-06-26 08:20:02

openapi格式注解

2025-01-10 06:30:00

2023-09-14 12:03:30

空指針判空

2020-12-07 06:05:34

apidocyapiknife4j
點贊
收藏

51CTO技術(shù)棧公眾號