C C 中 符號的運算順序是怎樣的?

時間 2021-05-29 22:57:51

1樓:

我也來補充個簡化版吧:

這個不是優先順序的問題也不是運算順序的問題,更不是加個括號能解決的問題,更跟什麼進棧出棧壓棧順序半毛錢關係都沒有,這是序列點的問題:

假設有兩個返回bool的函式:

bool A();

bool B();

又有乙個C函式:

void C( bool x , bool y );

那麼呼叫:

C( A() , B() );

時,請問是先執行A還是先執行B呢?

答案是不知道。處於兩個序列點之間的操作,先後順序是未指定的,即對順序沒有任何保證。 這樣做的目的是可以方便編譯器想怎麼整怎麼整。

所以處於同乙個序列點內的所有的呼叫你都不能假定以什麼順序發生。

2樓:Coldwings

1.關於++的行為,這個是有標準的。標準的內容就是++在前先加後取,++在後先取後加。

2.關於這個「不同」,並不是++的不同,而是cout裡《連續的表示式裡結合順序的差異。可以看出來g++/clang++是從左至右結合的;cl裡是從右至左取值結合的。

如果我沒記錯,按照標準,operator>>理應是從左至右結合的。

那麼問題來了,為什麼vs裡的cl不同?說好的標準化呢……?

關於前置 和後置 與 的運算順序?

這裡 其實是cout.operator 過載操作符,或者成員函式。這兩種呼叫方法,區別在於這個函式的引數是什麼。i,拷貝的是 操作符的返回值。i 拷貝的是i。這兩種情況,實際上就是i狀態的不同。嚴格地來說,從執行時的時序這個角度上說,不見得cout 稍微展開一些,根據C prime這本書呢 以下開始...

實踐中債務的清償順序是怎樣的?

清償 債務人依法律規定或合同約定完成義務的行為。清償與履行同義,只是清償是從債的消滅的角度而言,而履行是從債的效力出發強調債權的實現過程。清償是合同的權利義務終止的常見原因。知乎使用者 如何理解民法上的清償?在清償中應注意代物清償與清償抵充兩種特殊情形。1.代物清償 在履行合同債務過程中,債權人受領...

健身的順序是怎樣的

自然健身Z教授 甚至很多人到了健身房就是做臥推 二頭彎舉 練腹肌就收工回家了,只練身體前側肌群的情形下,肌力與肌肉量會發展不平均而造成 1.身形怪異 上身大下身小 2.體態不正 某些肌肉太緊 某些肌肉太鬆或是駝背 圓肩 骨盆前傾 高低肩.等等 部位訓練先後順序有關係嗎?初學者該如何安排?01.遵循胸...