2011-07-20 29 views
2

我有一個屬性是C++/CLI中的一個雙重屬性,我需要將其轉換爲整數,但編譯時會給我一個警告(c4244)。例如:Casting from double to int - Visual C++/CLI中的警告

//"Value" is a double 
int newValue = (int)(control->Value); //C4244 

我明白,編譯器不開心,因爲雙層可能會大於int可以支持,但這個特殊的控制都保證是從1到10的值,所以知道它會沒事的。我能否以某種方式消除此警告?

+1

有沒有情況我可以想到演員不壓制警告。即使使用/ Wall。一些重要的信息缺失。 –

+0

調用靜態函數時,實際強制轉換在參數列表中。也許這改變了事情? – Nate

回答

2

編譯器警告你不只是你可能會超出範圍,但你可能會失去信息(它需要以某種方式收集數字,並且害怕自己去做)。

使用floor()告訴它你知道你在做什麼:

int newValue = floor(control->Value); 

或者你可以明確地強制轉換隻是告訴編譯器有什麼隱含的事情,你知道你在做什麼:

int newValue = (int)(float)(control->Value); 
+0

@Nathan:用一個顯式強制轉換的例子更新了我的答案。 –

+1

除了@Yochai-Timmer上面說過的內容:請閱讀有關「編譯器警告(級別3和4)C4244」的MSDN文章(http://msdn.microsoft.com/zh-cn/library/th7a07tz.aspx ) – yasouser