51 C 副作用和順序點

2021-08-27 09:03:35 字數 732 閱讀 5323

下面更詳細地介紹c++就遞增運算子何時生效的哪些方面做了規定,哪些方面沒有規定。首先,***指的是在計算表示式時對某些東西(如儲存在變數中的值)進行了修改:順序點是程式執行過程中的乙個點,在這裡,進入下一步之前將確保對所有的***都進行了評估。在c++中,語句中的分號就是乙個順序點,這意味著程式處理下一條語句之前,賦值運算子、遞增運算子和遞減運算子執行的所有修改都必須完成。接下來的內容將討論有些操作也有順序點。另外,任何完整的表示式末尾都是乙個順序點。

何為完整表示式呢?他是這樣乙個表示式:不是另乙個更大表示式的子表示式。完整表示式的例子有:表示式語句中的表示式部分以及用作while迴圈中檢測條件的表示式。

順序點有助於闡明字尾遞增何時進行。例如,請看下面的**:

while(guests++<10)

cout現在來看下面的語句

y = ( 4 + x++) + (6 + x++);

表示式4+x++不是乙個完整表示式,因此,c++不保證x的值再計算字表示式4+x++後立刻增加1。在這個例子中,整條賦值語句是乙個完整表示式,而分號標示了順序點,因此c++只保證程式執行到下一條語句之前,x的值將被遞增兩次。c++沒有規定是在計算每個子表示式之後將x的值遞增,還是在整個表示式計算完畢後才將x的值遞增,有鑑於此,您應避免使用這樣的表示式。

在c++11文件中,不再使用術語「順序點」了,因為這個概念難以用於討論多執行緒執行。相反,使用了術語「順序」,它表示有些事件在其他事件之前發生。這種描述方法並非要改變規則,而旨在更清晰地描述多執行緒程式設計。

5 1 C 陣列的概念

概括地說 陣列是有序資料的集合。要尋找乙個陣列中的某乙個元素必須給出兩個要素,即陣列名和下標。陣列名和下標惟一地標識乙個陣列中的乙個元素。陣列是有型別屬性的。同一陣列中的每乙個元素都必須屬於同一資料型別。乙個陣列在記憶體中佔一片連續的儲存單元。如果有乙個整型陣列a,假設陣列的起始位址為2000,則該...

51 c 物件模型分析(下)

在c 編譯器的內部類可以理解為結構體,子類是由父類成員疊加子類新成員得到的。include include using namespace std class demo class derived public demo void print struct test int main 多型是物件導向...

C 鏈式棧和順序棧

分類 1.順序棧 2.鏈式棧 常用操作 push 和 pop 常見應用 1.括號匹配問題 2.逆波蘭表示式 說明 個人c 練習 鏈式棧 優點 棧的大小靈活 缺點 不能像陣列一樣靈活遍歷 include using namespace std 鏈式棧 struct data struct stackn...