警告:有符号和无符号整数表达式之间的比较
Warning: Comparison between signed and unsigned integer expression
我正在 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();
}
}
相关文章:
- 这 4 个 lambda 表达式之间有什么区别?
- 符号和未签名整数表达式之间的比较,以进行循环误差
- C++编译错误(有符号和无符号整数表达式之间的比较)
- C++ 有符号和无符号整数表达式之间的比较
- 有符号和无符号整数表达式之间的比较
- 消除有符号和无符号整数表达式之间比较的优雅方式
- 在文件中找到最长的行,签名和未签名的整数表达式之间的比较
- 逗号(,)在条件部分中两个表达式之间的for循环中的工作方式
- 警告:有符号和无符号整数表达式之间的比较
- 解释 c++ 中语句和表达式之间的区别
- c++:有符号和无符号整数表达式之间的比较
- 有符号和无符号整数表达式之间的比较
- visual c++ SEH - EXCEPTION_DISPOSITION枚举和__except()过滤器表达式之间的
- 有符号和无符号整数表达式之间的比较在make install时发出警告
- 在return语句中return和表达式之间是否有一个序列点?
- 我的For循环出了什么问题?我得到警告:有符号和无符号整数表达式之间的比较[-Wsigncompare]
- 警告:有符号和无符号整数表达式之间的比较.如何解决它
- 警告:有符号和无符号整数表达式之间的比较[-Wsign-compare]
- 什么是对右值表达式和左值表达式之间差异的简洁、严格的定义,涵盖了所有可能的情况
- 警告:有符号和无符号整数表达式之间的比较 [-Wsign-compare]