1樓:
這裡《其實是cout.operator<<(),過載操作符,或者成員函式。
這兩種呼叫方法,區別在於這個函式的引數是什麼。
++i,拷貝的是++操作符的返回值。
i++,拷貝的是i。
這兩種情況,實際上就是i狀態的不同。
嚴格地來說,從執行時的時序這個角度上說,不見得cout<
稍微展開一些,根據C++ prime這本書呢(以下開始搬運),所謂優先順序,決定的時運算元是怎麼和操作符組合在一起的,優先順序大的操作符先和運算元組合,相當於加個括號。優先順序並不是運算的順序,不是說優先順序大的先計算。實際上大多數操作符並未規定運算元的運算順序。
舉例來說,int i = f1() * f2() + f3().
我們只能說,operator*() 只是說把函式f1 f2的返回值相乘後,再加上f3()的返回值。並沒有說,f1 或者f2,一定比f3先算完,沒準時序上f3先算完。在這個例子裡,如果f3 f2 f1會修改同乙個資源,那麼就undefine了。
然後呢,實際上只有4種操作符規定了計算順序,operator&&(), operator||(),operator?:(),還有operator,()。對於其他的呢,最好還是在寫的時候,不要在操作符計算時假定某種時序。
2樓:
i++的返回值是i的副本。也就是說你可以理解成,在《運算前,i已經變成1了,可是傳遞給《的返回值是比如說其實是乙個tempi,在i自增之前賦值給他了,也就是0,所以輸出還是0。
或者說理解成:
//整個作為乙個++運算,你看在《前面吧
cout< 3樓:北極 inti= 0;//此時 i 值是0 cout <
endl ;// 這一句展開了就是: // 表示式的值 = (i++) = 0 // i計算完以後結果是1 // cout得到的值是: // cout << 表示式的值 << endl; //所以就是 cout << 0 << endl;cout <<++i < ;// 這一句展開了就是: // 表示式的值 = (++i) = 2 // i計算完以後結果是2 // cout得到的值是: // cout << 表示式的值 << endl; //所以就是 count << 2 << endl;所以題主你要區分表示式的值和i的值的區別。cout拿到的都是表示式的值,這個值跟i值不一定是相同的。 VS2008反彙編inti= 0;000C13DE movdword ptr[i], 0// 初始化i = 0 cout <
< ;000 C13E5 moveax ,dword ptr[i] 000C13E8 movdword ptr[ ebp- 0D0h ],eax //取i值,儲存到[ebp-0xD0]裡 000C13EE movecx ,dword ptr[i] //取i值 000C13F1 addecx,1 //加1 000C13F4 movdword ptr[i], ecx//儲存i 000C13F7 movesi ,esp 000C13F9 movedx ,dword ptr[ __imp_std ::endl(0 C8290h )]000 C13FF push edx//endl入棧(傳參) 000C1400 movedi ,esp 000C1402 moveax ,dword ptr[ ebp- 0D0h ]//[ebp-0xD0]入棧(值是0) 000C1408 push eax000 C1409 movecx ,dword ptr[ __imp_std ::cout(0 C8294h )]//處理運算子<< 000C140F call dword ptr[ __imp_std ::basic_ostream ,std ::char_traits >>:: operator <<(0 C829Ch )]000 C1415 cmpedi ,esp 000C1417 call @ILT +325 (__RTC_CheckEsp)( 0C114Ah )000 C141C movecx ,eax //處理運算子<< 000C141E call dword ptr[ __imp_std ::basic_ostream ,std ::char_traits >>:: operator <<(0 C8298h )]000 C1424 cmpesi ,esp 000C1426 call @ILT +325 (__RTC_CheckEsp)( 0C114Ah )cout <<++i < ;000 C142B moveax ,dword ptr[i] //取i值 000C142E addeax,1 //加1 000C1431 movdword ptr[i], eax//儲存i值 000C1434 movesi ,esp 000C1436 movecx ,dword ptr[ __imp_std ::endl(0 C8290h )]000 C143C push ecx//endl入棧 000C143D movedi ,esp 000C143F movedx ,dword ptr[i] //i值(值是2)入棧 000C1442 push edx000 C1443 movecx ,dword ptr[ __imp_std ::cout(0 C8294h )]000 C1449 call dword ptr[ __imp_std ::basic_ostream ,std ::char_traits >>:: operator <<(0 C829Ch )]000 C144F cmpedi ,esp 000C1451 call @ILT +325 (__RTC_CheckEsp)( 0C114Ah )000 C1456 movecx ,eax 000C1458 call dword ptr[ __imp_std ::basic_ostream ,std ::char_traits >>:: operator <<(0 C8298h )]000 C145E cmpesi ,esp yixiang liu 動力艙在哪兒,主動輪就在哪兒唄。根據我的觀察,從前往後駕駛艙 戰鬥艙 動力艙的布局是坦克發展過程中確立的最合理的布局,至於為什麼步兵戰車,比方說05式兩棲動力艙在前面,那是因為它後面是乘員艙啊,還要開門,所以只能放在前面。至於梅卡瓦的前置布局,造成了很多的問題的,世界上除了以... w2014 以C99為例,並沒有找到直接解釋這個問題的描述。但是在6.5.16 Assignment operators 中有這樣的描述 An assignment operator stores a value in the object designated by the left operan... 八方錦程僱傭風險管理 背景調查 一般是在通過面試後進行,可以是offer前,也可以offer後,有些是入職前做背調,有些特定情況,入職後做背調。而現在大部分企業所強調,一般是入職前背景調查。八方錦程做背景調查12年,遇到不少的情況。比如,候選人通過面試後,與雇主是約定離職時間,仍在前雇主工作,該如何...履帶車輛的主動輪前置與後置有哪些優劣?
C語言中的前置 和後置 返回的都是右值嗎?
背景調查與offer和辭職的先後順序?