錯誤/警告類型總結——comparison between signed and unsigned integer expressions


A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]
1
    vector<int> histogram = Histogram(img);
    int total = 0;
    for (int i = 0; i != histogram.size(); ++i)
    {
        total += histogram[i];
    }
123456

警告的意思是一個無符號數整型與有符號整型最好不要比較。i是有符號整型,histogram.size()是無符號整型,所以會產生這個警告。
解決方式:

  1. for (unsigned int i = 0; i != histogram.size(); ++i)
    最省力的,將i改成unsigned int 就不會產生這個警告了
  2. for (std::size_t i = 0; i != histogram.size(); i++)
    size_t 類型定義在cstddef.h中,該文件是C標准庫的頭文件stddef.h的C++版。它是一個與機器相關的unsigned類型,其大小足以保證存儲內存中對象的大小。在用下標訪問元素時,vector使用vector::size_type作為下標類型,而數組下標的正確類型則是size_t。
  3. for (vector::size_type i = 0; i != histogram.size(); ++i)size_type是由string類類型和vector類類型定義的類型,用以保存任意string對象或vector對象的長度,標准庫類型將size_type定義為unsigned類型。

三種解決方式都試過了,解決問題~

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:http://blog.csdn.net/qq_43792862/article/details/97647454


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM