共用方式為


編譯器警告 (層級 4) C4463

溢出;將 指派給位欄位,而該欄位只能保留low_value high_value

指派 的值 超出位欄位可以保存的值範圍。 帶正負號的位欄位類型會使用正負號的高序位,因此如果 n 是位欄位大小,帶正負號位欄位的範圍是 -2 n-1 到 2 n-1-1 ,而未帶正負號的位欄位的範圍從 0 到 2 n-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.
}