我與必要的填充下面的32位對齊的結構,保證了i32
數據成員的32位對齊:讀寫
struct
{
std::uint8_t i8;
std::uint32_t i32;
} x, y = {0};
在填充比特寫入具有一個明確的行爲?例如,在代碼:
reinterpret_cast<std::uint32_t&>(x) = 256u;
是填充部分總是寫入和讀取爲1?
另一個問題:
是填充總是初始化爲0 y
?
我明白,從而C++ [dcl.init]狀態:
要零初始化對象或類型T的參考是指:如果T是一個 非工會類型,每個非-static數據成員,並且每個基類 子對象零初始化和填充被初始化爲零位
然而,我沒有看到在Microsoft編譯這種行爲(VC++ V120),例如:
reinterpret_cast<std::uint32_t&>(y) == 0u
未評估爲true
。這可能是一個缺失的功能,或者我誤解了標準中的短語。
'y'未初始化爲零,它的值初始化。初始化規則是超級不直觀和令人困惑的。 –
這就是說,我來到這裏找到你的問題的第一部分的答案:(可悲的是,這裏沒有答案 –