我正在閱讀C++教科書,並且遇到以下練習練習。C++地址和指針
是真是假?解釋:
A. If (x == y) then (&x == &y).
B. If (x == y) then (*x == *y).
教科書說A是真的,B是假的,但我相信它應該是相反的?只是因爲x == y並不意味着& x和& y具有相同的地址,我不明白爲什麼B是錯誤的。
我正在閱讀C++教科書,並且遇到以下練習練習。C++地址和指針
是真是假?解釋:
A. If (x == y) then (&x == &y).
B. If (x == y) then (*x == *y).
教科書說A是真的,B是假的,但我相信它應該是相反的?只是因爲x == y並不意味着& x和& y具有相同的地址,我不明白爲什麼B是錯誤的。
首先,我解釋了這樣一個問題,即命題必須對錶達式格式良好的任何類型都成立。 A.顯然是錯誤的,因爲兩個對象可以具有相同的值,但不能存儲在相同的地址中。但對所有情況來說都不是錯誤的。例如,當一個是對另一個的引用時。 B.也是虛假的,但不太清楚。如果等號和/或解引用運算符已經被複雜的函數超載,那麼命題不能保證。但是對於基本類型的簡單指針,這個命題是真實的。
因此,如果我們忽略非基本類型的可能性,那麼本書的答案似乎確實被顛倒過來了。考慮到超載,B似乎是正確的,可能是偶然的,而A只是錯誤的。
x和y應該是什麼類型? –
是的,A是未定義的,但通常是錯誤的。如果在C++中使用x和y指針 – RbMm
,那麼B是true,那麼可以重載運算符:http://en.cppreference.com/w/cpp/language/operators。所以,一般來說,我認爲我們不能從這些條件中說出任何事情。 –