事实上并没有区别。任何计算结果为非零值的表达式都被视为逻辑真表达式,而计算结果为0的表达式被视为逻辑假表达式。来自C标准(6.8.5 迭代语句):一个迭代语句会使得被称作循环体的语句重复执行,直到控制表达式比较为0。无论循环体是从迭代语句中进入还是通过跳转进入,循环仍将执行。注意在C中,带有等于运算符的表达式的值只能是1或0。因此,如果关系成立,表达式`str[i] != '\0'`会产生1(非零值),否则会产生-0。在C++中,这种表达式的类型是`bool`,它的值要么是true,要么是false。来自C++14标准(4.12 布尔转换):算术、未加限定的枚举、指针或指向成员的prvalue可以转换为布尔类型的prvalue。零值、空指针值或空成员指针值转换为false;任何其他值转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为布尔类型的prvalue;结果值为false。