通常,我看到的代码是if(s.length() > 1) ...
,但这里只有if(s.length())
。
length
功能的实现方式如下所述。当在包含int main()
的文件中的test3
函数调用中使用时,if(s.length)
是否表示如果它返回的计数大于零,则它将执行该if
语句的主体?
int statistician::length() const
{
return count;
}
代码(int main()
中的test3()
调用(:
statistician s, t, u, v;
if (s.length( ) || t.length( )) return 0; // <-- HERE
if (s.sum( ) || t.sum( )) return 0;
t.next(5);
u.next(0); u.next(10); u.next(10); u.next(20);
v = s + s;
if (v.length( ) || v.sum( )) return 0;
v = s + u;
if (!(u == v)) return 0;
v = t + s;
在c++
中,int
可以隐式转换为布尔。规则是:
int (0) -> false
int (anything else) -> true
在您的情况下,如果存在,长度将返回一些正数,如果不存在,则返回0,因此此逻辑为:
if (s.length())
相当于
if (s.length() >= 1)
^ // Very important, you probably missed this, but you probably
// want to know if the string is greater than 0, not "2 or more"
对于您可能已经实现它的方式。然而int
也可以是负值,负值仍然不是0,因此也将是true
。如果你的功能是这样的:
int length() {
if (some condition) {
return -1; // error code
}
return count;
}
那么你的if语句突然变得不等价了。所以如果不是这样的话,最好的办法就是按照你的意愿来表示你的数据。也就是说,如果你的计数值不能为负,那么就不要允许它为负。使用unsigned int
或size_t
:
size_t length();