【发布时间】:2014-03-05 08:48:40
【问题描述】:
在将项目从 vc++ 6.0 迁移到 vs 2008 时,我收到以下警告。谁能解释一下为什么会出现这个警告?
inline tstring& tstring::trim()
{
long lDelFront = 0, lDelBack = 0;
while (lDelFront < length() && at(lDelFront) == ' ') //C4018 Warning
lDelFront++;
if ( lDelFront > 0 )
{
erase(0, lDelFront);
}
while (lDelBack < length() && //C4018 Warning
at(length() - lDelBack - 1) == ' ')
lDelBack++;
if ( lDelBack > 0 )
{
erase(length() - lDelBack, lDelBack);
}
return *this;
}
谢谢! 安库什
【问题讨论】:
-
问题是 - 'lDelBack 已签名,
length()返回未签名或相反。或者你问这是什么问题? -
警告是因为 C++(和 C)有愚蠢的整数提升规则。
lDelFront是有符号的,length()是无符号的,这导致lDelFront被转换为unsigned long,如果它有一个负值,那么它会突然变得非常大。 -
请在发布到 SO 时正确缩进您的代码。此外,您应该在警告的一行中向我们提供所有变量的类型。
标签: c++ visual-c++