首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ Primer 學習筆記(四):表達式、運算符與語句細節

     編輯:C++ 入門

表達式基礎

  • 每個表達式有結果,字面值/變量結果為自身
  • 結果分左值(可寫入,如 ++i)和右值(如 i++、字面值)
  • 逗號運算符結果為最右子表達式的值,若最右為左值則整體為左值

求值順序與副作用

  • 運算符優先級、結合性決定結構,但操作數求值順序未規定(如 f1()*f2() 調用順序不定)
  • 序點:上一序點到下一序點間,對象值至多修改一次。長表達式中多次修改同一對象行為未定義
  • i++ 返回舊值(右值),++i 返回新值引用(左值)

關鍵運算符細節

運算符注意點
% /負數運算結果符號/絕對值在 C++98/03 中實現定義,C++11 規定截向零
&& \|\|短路求值:左操作數決定結果則不算右操作數
== vs =易混淆,建議常量左放:if (42 == i) 防誤寫成賦值
位運算操作數為有符號負數時移位行為實現定義,建議用無符號類型
移位左移補 0,右移無符號補 0,有符號補符號位(算術移位)或 0(邏輯移位)視實現

流輸出優先級陷阱

cout << 42 + 10;      // 正確,+ 優先級高於 <<
cout << (10 < 42);    // 正確,括號提升優先級
cout << 10 < 42;      // 錯誤:(cout<<10) 返回 ostream&,與 42 比較無意義

賦值表達式

  • 右結合:a = b = 0 等價 a = (b = 0)
  • 返回左操作數引用,可鏈式賦值
  • 優先級極低,幾乎最後結合

交換兩數技巧

// 算術法(可能溢出)
a = a + b; b = a - b; a = a - b;

// 異或法(無溢出,同變量時歸零需注意)
a ^= b; b ^= a; a ^= b;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved