[英]How can I cast an std::bitset<N> to an std::bitset<M>?
[英]std::bitset<N> implementation causes size overheard
看起來std::bitset<N>
現在是一個unsigned longs
數組,這意味着當 N 很小時會有(沉重的?)開銷。 sizeof(std::bitset<8>)
是8 bytes
!
底層數組本身的類型不是template
參數是否有原因? 為什么實現在更合適的時候不使用uint32_t/16_t/8_t
? 我在實施中沒有看到任何限制這一點的東西嗎?
我猜我錯過了一個特定的原因,但不確定如何尋找它或者根本沒有原因? 由於這是一個如此簡單的container
,我無法理解這里似乎如何避免C++
的零開銷原則。
GCC 實施: https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a00775_source.html
我相信 clang 是相似的(使用 sizeof 來確認)
我無法理解這里似乎如何避免 C++ 的零開銷原則。
零開銷原則是一個原則,不是C++的絕對規則。
許多人在編譯時固定容量有用的情況下使用std::vector
。 這樣的類型可以只有兩個指針而不是三個,因此可以小 50%。 許多人使用std::string
的上下文中,不可變字符串即使不是更好也同樣有效; 它會減少字符串的大小(忽略 SSO),以及它的復雜性。 等等。
這些都代表了相對於標准類型的低效率。 沒有標准庫類型可以處理所有可能的使用場景。 這些類型的目標是廣泛有用,而不是完美。
沒有什么可以阻止某人使用具有用戶提供的基礎類型的完全相同的接口編寫位集樣式類型。 但是標准沒有這種類型。
事實上,沒有什么可以阻止bitset
的實現根據給定的位數選擇底層類型。 您的實現不會那樣做,但它可以做到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.