'conversion':將 'type1' 轉換為 'type2',資料可能遺失
整數類型會轉換為較小的整數類型。
- 如果 type1 是帶正負號或未帶正負
int
號,且 type2 為較小的層級 4 警告,例如帶正負號或未帶正負號short
的 。 - 如果類型
__int64
為 或unsigned __int64
的值指派給帶正負號或未帶正負int
號的 ,則為層級 3 警告。 由於轉換縮小,可能會遺失數據,這可能會導致非預期的結果。
若要修正此警告,請將程式變更為使用相容的類型,或新增邏輯,以確保可能的值範圍與您所使用的類型相容。 如果打算轉換,請使用明確轉換來讓警告無聲。
當警告層級為 2 時,也會顯示 C4244。 如需詳細資訊,請參閱 編譯程式警告(層級 2) C4244。
下列範例會產生 C4244:
// C4244_level4.cpp
// compile with: /W4
void test(unsigned short num) {}
int main() {
int int1 = 1;
unsigned int uint1 = 2;
short short1 = int1; // C4244
short short2 = (short)int1; // warning silenced - explicit cast
short short3 = uint1; // C4244
unsigned short ushort = uint1; // C4244
test(uint1); // C4244
}
如需詳細資訊,請參閱 一般算術轉換。
如需在Visual Studio中設定警告層級的詳細資訊,請參閱 在Visual Studio開發環境中設定編譯程序選項
// C4244_level3.cpp
// compile with: /W3
int main() {
__int64 i64 = 1;
unsigned __int64 u64 = 2;
int int1 = i64; // C4244
int int3 = u64; // C4244
}
針對建置 32 位目標時不會產生警告的 64 位目標代碼時,可能會發生警告 C4244。 例如,指標算術會導致 32 位平臺上的 32 位數量,但在 64 位平臺上產生 64 位的數量。
下列範例會在進行 64 位元目標的編譯時產生 C4244:
// C4244_level3_b.cpp
// compile with: /W3
int main() {
char* p1 = 0;
char* p2 = 0;
int x = p2 - p1; // C4244
}