共用方式為


編譯器警告 (層級 4) C4463

溢出;將指派給位字段,而該欄位只能保留low_valuehigh_value

指派 的值 超出位欄位可以保存的值範圍。 帶正負號的位欄位型態會使用正負號的高序位,因此如果 n 是位欄位大小,帶正負號位欄位的範圍是 -2n-1 到 2n-1-1,而未帶正負號的位欄位的範圍從 0 到 2n-1

範例

此範例會產生 C4463,因為它嘗試將值為 3 指派給類型 int 為 2 的位字段,其範圍從 -2 到 1。

若要修正此問題,您可以將指派的值變更為允許範圍內的專案。 如果位欄位的目的是要保留介於 0 到 3 範圍內的不帶正負號值,您可以將宣告類型變更為 unsigned。 如果欄位是要保留範圍 -4 到 3 中的值,您可以將位字段大小變更為 3。

// C4463_overflow.cpp
// compile with: cl /W4 /EHsc C4463_overflow.cpp
struct S {
    int x : 2; // int type treats high-order bit as sign
};

int main() {
    S s;
    s.x = 3; // warning C4463: overflow; assigning 3
    // to bit-field that can only hold values from -2 to 1
    // To fix, change assigned value to fit in range,
    // increase size of bitfield, and/or change base type
    // to unsigned.
}