You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

if判断无显式比较时string.size()为何可直接作为布尔值使用

if(!word.size()){
    return true;
}

写法的语法原理

这种写法依赖C++的标量类型到布尔值的隐式转换规则,和string.size()本身的返回值特性无关:

  • 首先std::string::size()的返回值是无符号整型size_t,值对应当前字符串的字符长度,空字符串时返回值为0,非空时返回正整数。
  • C++语法规定,所有整型、浮点型、指针类型这类标量值,出现在if判断、逻辑运算(!/&&/||)这类需要布尔值的语境时,会自动做隐式类型转换:
    • 值为0时,转换得到布尔值false
    • 值为任意非0值时,转换得到布尔值true

对应这段代码的执行逻辑:

  • 当word是空串时,word.size()返回0,隐式转换为false,经过!取反后得到true,满足if条件,进入分支返回true
  • 当word非空时,word.size()返回大于0的正整数,隐式转换为true,取反后得到false,不进入if分支

这是C/C++开发里非常普遍的简写写法,和显式写if(word.size() == 0)的执行逻辑完全一致,只是省略了和0的显式比较,靠语言内置的隐式转换完成判断。同理常见的空指针判断if(!ptr),也是依赖同一个转换规则:空指针值为0转false,取反后为true进入分支。

内容的提问来源于stack exchange,提问作者piercashuang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:09:28