[英]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.