2017-06-12 87 views
10

std::byte是應該提供一種安全的(r)的訪問的存儲器區域在C++中,開始與新的標準17.但是一種抽象,它根據http://en.cppreference.com/w/cpp/types/byte宣稱這種方式:爲什麼`std :: byte`是一個枚舉類而不是類?

enum class byte : unsigned char {} ; 

即是,這是一個enum class沒有任何枚舉。由於通常enums的目的是提供一個有限的枚舉集合,這似乎有點奇怪。與私人unsigned char成員類似乎是更明顯的方式來做到這一點。

爲什麼這樣做?

回答

13

A classunsigned char成員將不會被要求與unsigned char相同的大小或對齊。而標準要求枚舉與其基礎類型的大小和對齊方式相同。現在

,標準可以簡單說,它是一個class類型沒有標準定義的部件,但在其大小,對齊,constexpr構造等具體要求;實現將不得不貫徹這些期望。但簡單地使用enum class以獲得相同效果要容易得多。您可以獲得所期望的所有構造函數和轉換行爲。並且由於enum class類型被視爲與其基礎類型不同的類型,因此您可以獲得所有您想要的行爲,而不會以這種方式定義它。

相關問題