[英]determining True/False
以下代码
#include <iostream>
using namespace std;
int main(){
char greeting[50] = "goodmorning everyone";
char *s1 = greeting;
char *s2 = &greeting[7];
bool test = s2-s1;
cout << "s1 is: " << s1 << endl;
cout << "s2 is: " << s2 << endl;
if (test == true ){
cout << "test is true and is: " << test << endl;
}
if (test == false){
cout<< "test is false and is: " << test << endl;
}
return 0;
}
输出:
s1 is: goodmorning everyone
s2 is: ning everyone
test is true and is: 1
这里的bool test = s2-s1;
实际求值?是字符串的长度吗? 如果是这样,则看到s2小于s1,它应该为负正确吗?,而输出为true。
另外,如果我将其更改为bool test = s1-s2;
我仍然得到相同的结果。 因此,不管它的消极还是积极的事实都是true
? 并且只有0时为false。
s2-s1是什么意思?
欢呼(努力摆脱疑虑:)
如果相减的结果为零,则test
为假;否则为零。 否则它将是真实的。
任何数值类型,枚举类型或指针的值都可以转换为布尔值; 如果值为零(对于指针,则为null),则结果为false;否则,结果为false。 否则结果为true。
整数类型,浮点类型和指针类型都可以转换为bool。 对于所有这些,值0会转换为false,而非零值会转换为true。
因此,如果s2 - s1
评估为0,则test
为假。 否则, test
为真。
由于s1
和s2
是指针,因此s2 - s1
给出它们之间的差(地址有多远)。 如果它们指向相同的地址,则差将为0。如果它们指向不同的地址,则结果将为非零。 因此,实际上所有test
表明s1
和s2
是否指向不同的地址。 s1 != s2
将给出完全相同的结果,并且可能更有意义。
但是,鉴于s1
和s2
的值是硬编码的,并且保证指向不同的地址,因此该测试实际上没有任何意义。 不过,在另一程序中可能会有意义-尤其是将s1
和s2
传递到函数中的程序,您无法提前知道它们是否真的相同。
行bool test = s2-s1
指针减法,给出将s2
与s1
分开的char
s的数量。 然后,仅当结果为0时,才将结果转换为false
从而将该结果转换为bool,否则将其转换为true
。
有关添加/减去指针时发生的情况的详细说明,请参见: http : //www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/pointer.html
C ++允许隐式转换,因此它正在做的是从另一个数组中减去一个数组的指针值,如果结果为null,则它隐式将null转换为false。 其他任何事情都将是真实的,因为布尔的工作方式使其为零(假)或真实。
感谢Nathan S.和indiv纠正我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.