2015-05-14 125 views
0

對於Microsoft Visual Studio 2015 RC中的以下函數,我收到了兩個關於有符號和無符號變量比較的警告。從'uint64_t'轉換爲'unsigned int'

uint64_t findMin(vector<uint64_t> &v) 
{ 
    uint64_t min = 0; 
    uint64_t s = v.size(); 
    for (uint64_t i = 0; i < s; ++i) { 
     if (v[i] != 0) { // WARNING 
      min = v[i]; // WARNING 
      break; 
     } 
    } 
    ... 
} 

的警告

warning C4244: 'argument': conversion from 'uint64_t' to 'unsigned int', possible loss of data 

,因爲至少我相信,minv[i]都有uint64_t變量,這是明顯的這是奇怪。

與RC版本有關嗎?或者背後有什麼我不知道的東西?

+0

你的常量應該有適當的後綴。文字0默認是帶符號的int。 –

+0

推測size_t也是uint64_t?我認爲這是索引... – JCx

回答

4

編譯器警告的「參數」是operator[]i參數v[i](注意這是這兩行中唯一的參數)。

operator[]過載的參數類型爲size_t。在32位版本size_t是一個32位無符號整數。將64位無符號i轉換爲32位無符號參數類型是一種縮小轉換。

+0

大概是「for(size_t i = 0; i JCx

+0

參數實際上是'size_type',通常與'size_t'相同,但不一定。 – Brian

+1

@JCx假設我們理解代碼的意圖,那麼我們需要完全擺脫這個函數,並使用'std :: min_element' – Praetorian

相關問題