警告:有符号和无符号整数表达式之间的比较

Warning: Comparison between signed and unsigned integer expression

本文关键字:表达式 之间 比较 无符号整数 符号 警告      更新时间:2023-10-16

我正在 codepad.org 上运行以下代码,但出现此错误。"在成员函数'double Xchange::getprice(std::string)'中:第 87 行:警告:有符号和无符号整数表达式的比较"

这是我的代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Xchange
{
public:
    Xchange();//does nothing (?)
    double getprice(string symbol);
private:
    vector <Stock> stocks;
};
double Xchange::getprice(string symbol)
{
    for(int i=0; i < stocks.size(); i++) {
        if(stocks[i].getsymbol()==symbol) {
            return stocks[i].getprice();
        }
    }
    return -1; //means not found
}

在这里:

for(int i=0; i < stocks.size(); i++)

i是有符号整数,stocks.size()是无符号的。您可以使用 std::size_t ,或者,如果您想更精确,请使用 vector<Stock>::size_type

for(vector<Stock>::size_type i=0; i < stocks.size(); i++) { .... }

此警告试图防止的问题是,负签名到无符号的转换会产生大量数据,并且很可能不是您想要的。除此之外,有符号整数的数字范围与大小相同的无符号整数的数字范围不同。

有关详细信息,请参阅C++类型。

请注意,这在 C++11 中更容易:

for(const auto& stock : stocks)
{
    if(stock.getsymbol()==symbol) //added getsymbol "()"
    {
        return stock.getprice();
    }
}