在C 中,a b和b a有沒有什麼區別?

時間 2021-05-31 12:07:52

1樓:天雲海

如果a和b是兩個表示式的話,那麼差別將會是:表示式運算時序不同。

int a=2;

if(((a=a*2)>0)==((a=a+2)>0))cout<

2樓:d41d8c

對於 Boost.Test 來說,有區別

#define BOOST_TEST_MODULE boost_test_macro3

#include

BOOST_AUTO_TEST_CASE( test_op_reportings )

輸出check x + y == 3 has failed [1 + 1 != 3]

把 x + y == 3 換成 3 == x + y ,則會輸出

check 3 == x + y has failed [3 != 2]

(實際的程式輸出稍長一些,這裡只擷取了與主題相關的輸出)

注意方括號裡面,前者把加法的形式保留下來了,後者只記錄了加法的結果。換句話說,把常量放左邊的做法會損失資訊量

3樓:Milo Yip

對於基本型別(primitive type),此運算子滿足交換律;對於類/結構體,過載此運算子可以不滿足交換律,但正常人不會這麼做吧。

4樓:李治洲

剛入門OIer,看到這個問題就進來小小的思考一下。

在我剛入門C++的時候,a==b這個判定我們老師是在講迴圈體的判斷時提到的,當時我們老師問了我們這樣乙個問題:a等於b嗎?

那麼同理,b==a是在判定「b是否等於a」。

所以,無論是兩個常量a、b,還是乙個常量乙個變數a、b,甚至是兩個變數a、b,a==b或者b==a的意義都是判定a和b中儲存的值是否相等。

如當前最高票的答案說的一樣,如果開優化編譯結果乙個快乙個慢,就把編譯器作者抓出來打。

5樓:靈劍

只說標題的話,有。a == b匹配到的是a.(operator ==)(b),或者operator ==(a,b);b == a則反過來匹配b.

(operator ==)(a),或者operator ==(b,a)。原理上可以把兩者實現成不一樣的,導致兩個方向的結果可能不一樣,但一般人都不會這麼幹,大部分人應該會只實現乙個方向,在另乙個方向上呼叫這個方向吧。

如果不考慮運算子過載的問題,那麼把常量放在左邊、變數放右邊主要是為了防止手殘把==寫成=,但其實我個人不覺得這種傻X錯誤值得用乙個更傻X的方法來解決……

在C 中 String Empty和 有什麼區別?

Ken.W 這類問題去stackoverflow問效果更好 榮浩 String.Empty是String類裡已經例項化好的靜態唯讀空字串,我們可以直接拿來用。而對於 系統需要去託管堆上例項化乙個空字串,效能略差一些吧 這種說法是錯誤的!Strings1 String Empty Strings2 C...

C 中 print 和 cout 什麼區別?

量大的情況下printf比cout快一點點,摸的乙個字元畫demo。迴圈裡面分別使用cout和printf來輸出rgb值。cout跑完一張640 640的圖需要17s,printf只需要14.9s,不輸出直接跑的話,只需要4ms, Tango C 盡量用cin,cout 就像用vector而不是陣列...

C 中 int a 和 int a 有什麼區別?

楊喚晨 做形參的時候,int a與int a無任何區別。眾所周知,陣列名本身就是指標 如果宣告乙個int a 5 那麼a就是乙個指標。既然無區別,為什麼還要設定兩種形參呢?顯然,這是考慮到了程式的可讀性。如果你希望傳遞陣列,就用前者 如果只是單純地想傳遞指標,就用後者 int a 和 int a 在...