C和C++運算子- 維基百科,自由的百科全書

文章推薦指數: 80 %
投票人數:10人

運算子優先級[編輯]. 以下是C++程式語言中的所有運算子的優先級和結合性列表。

... not_eq, 不等於關係 ... 符號, 安全性, 符號, 安全性, 符號, 安全性, 符號, 安全性. C和C++運算子 維基百科,自由的百科全書 跳至導覽 跳至搜尋 所有的C語言運算子都被C++語言支援。

C語言不支援運算子多載。

在不多載時,運算子&&、||、,(逗號運算子),在第一個運算元求值之後有一個順序點。

大部分C與C++運算子也可用於其它程式設計語言如C#、Java、Perl、PHP等,具有相同的優先級、結合性與語意。

目次 1運算子優先級 2列表 2.1算術運算子 2.2比較運算子 2.3位元運算子 2.4其它運算子 2.5語言擴展 3註解 4安全問題 5參閱 6參考資料 7外部連結 運算子優先級[編輯] 以下是C++程式語言中的所有運算子的優先級和結合性列表。

優先級 運算子 敘述 範例 多載性 結合性 1 :: 作用域解析(C++專有) Class::age=2; 否 由左至右 2 ++ 字尾遞增 i++ -- 字尾遞減 i-- () 函式呼叫或函式呼叫形式的類型轉換 intx=f(); [] 陣列存取 array[4]=2; . 以物件方式存取成員 obj.age=34; 否 -> 以指標方式存取成員 ptr->age=34; dynamic_cast 執行時檢查類型轉換(C++專有) Y&y=dynamic_cast(x); 否 static_cast 未經檢查的類型轉換(C++專有) Y&y=static_cast(x); 否 reinterpret_cast 重定義類型轉換(C++專有) intconst*p=reinterpret_cast(0x1234); 否 const_cast 更改非常數屬性(C++專有) int*q=const_cast(p); 否 typeid 取得類型資訊(C++專有) std::type_infoconst&t=typeid(x); 否 3 ++ 字首遞增 ++i 由右至左 -- 字首遞減 --i + 一元正號 inti=+1; - 一元負號 inti=-1; !not 邏輯非!的備用拼寫 if(!done)… ~compl 按位元取反~的備用拼寫 flag1=~flag2; (type) 強制類型轉換 inti=(int)floatNum; * 取指標指向的值 intdata=*intPtr; & 取變數的位址 int*intPtr=&data; sizeof 某某的大小 size_ts=sizeof(int); 否 new 動態記憶體分配(C++專有) long*pVar=newlong; new[] 動態陣列記憶體分配(C++專有) long*array=newlong[20]; delete 動態記憶體釋放(C++專有) deletepVar; delete[] 動態陣列記憶體釋放(C++專有) delete[]array; 4 .* 成員物件選擇(C++專有) obj.*var=24; 否 由左至右 ->* 成員指標選擇(C++專有) ptr->*var=24; 5 * 乘法 inti=2*4; / 除法 floatf=10.0/3.0; % 模數(取餘數) intrem=4 %3; 6 + 加法 inti=2+3; - 減法 inti=5-1; 7 << 位元左移 intflags=33<<1; >> 位元右移 intflags=33>>1; 8 <=> 三路比較(C++20) autoflags=33<=>1; 9 < 小於關係 if(i<42)… <= 小於等於關係 if(i<=42)... > 大於關係 if(i>42)… >= 大於等於關係 if(i>=42)... 10 == 等於關係 if(i==42)... !=not_eq 不等於關係!=的備用拼寫 if(i !=42)… 11 &bitand 位元AND&的備用拼寫 flag1=flag2&42; 12 ^xor 位元XOR(獨占or)^的備用拼寫 flag1=flag2^42; 13 |bitor 位元OR(包含or)|的備用拼寫 flag1=flag2|42; 14 &&and 邏輯AND&&的備用拼寫 if(conditionA&&conditionB)… 15 ||or 邏輯OR||的備用拼寫 if(conditionA||conditionB)... 16 c?t:f 三元條件運算 inti=a>b ?a :b; 否 由右至左 17 = 直接賦值 inta=b; += 以和賦值 a+=3; -= 以差賦值 b-=4; *= 以積賦值 a*=5; /= 以商賦值 a/=2; %= 以取餘數賦值 a %=3; <<= 以位元左移賦值 flags<<=2; >>= 以位元右移賦值 flags>>=2; &=and_eq 以位元AND賦值&=的備用拼寫 flags&=new_flags; ^=xor_eq 以位元XOR賦值^=的備用拼寫 flags^=new_flags; |=or_eq 以位元OR賦值|=的備用拼寫 flags|=new_flags; 18 throw 丟擲異常 throwEClass("Message"); 否 19 , 逗號運算子 for(i=0,j=0;i<10;i++,j++)… 由左至右 列表[編輯] 在本表中,a、b和c代表有效值(來自變數或返回值的逐字常數或數值)、物件名稱,或適當的左值。

算術運算子[編輯] 運算子名稱 語法 可重載 C語言裡有 一元正號 +a 是 是 加法(總和) a+b 是 是 前綴遞增 ++a 是 是 後綴遞增 a++ 是 是 以加法賦值 a+=b 是 是 一元負號(取反) -a 是 是 減法(差) a-b 是 是 前綴遞減 --a 是 是 後綴遞減 a-- 是 是 以減法賦值 a-=b 是 是 乘法(乘積) a*b 是 是 以乘法賦值 a*=b 是 是 除法(分之) a/b 是 是 以除法賦值 a/=b 是 是 模數(餘數) a%b 是 是 以模數賦值 a%=b 是 是 比較運算子[編輯] 運算子名稱 語法 可重載 C語言裡有 小於 ab 是 是 大於或等於 a>=b 是 是 不等於 a!=b 是 是 等於 a==b 是 是 邏輯取反 !a 是 是 邏輯AND a&&b 是 是 邏輯OR a||b 是 是 三路比較 a<=>b 是 否 位元運算子[編輯] 運算子名稱 語法 可重載 C語言裡有 位元左移 a<>b 是 是 以位元右移賦值 a>>=b 是 是 位元一的補數 ~a 是 是 位元AND a&b 是 是 以位元AND賦值 a&=b 是 是 位元OR a|b 是 是 以位元OR賦值 a|=b 是 是 位元XOR a^b 是 是 以位元XOR賦值 a^=b 是 是 其它運算子[編輯] 運算子名稱 語法 可重載 C語言裡有 基本賦值 a=b 是 是 函式呼叫 a() 是 是 陣列下標 a[b] 是 是 間接(向下參考) *a 是 是 的位址(參考) &a 是 是 成員指標 a->b 是 是 成員 a.b 否 是 間接成員指標 a->*b 是 否 間接成員 a.*b 否 否 轉換 (type)a 是 是 逗號 a,b 是 是 三元條件 a?b:c 否 是 作用域解析 a::b 否 否 的大小 sizeofa 否 是 類型識別 typeidtype 否 否 分配儲存區 newtype 是 否 解除分配儲存區 deletea 是 否 語言擴展[編輯] 運算子名稱 語法 可重載 C語言裡有 提供者 標籤值 &&label 否 是 GCC 取得型態 typeofatypeof(expr) 否 是 GCC 最小/最大值 a?b 否 否 GCC<4.3 註解[編輯] 在C和C++中對運算子的約束,是語言的語法規範因素所指定的(在對應的標準中),而不是優先級列表。

這造成了一些微妙的衝突。

例如,在C中,條件表達式的語法是: 邏輯-OR-表達式 ?表達式 :條件-表達式 在C++中則是: 邏輯-or-表達式 ?表達式 :賦值-表達式 因此,這個表達式: e=a ?b :c=d 兩個語言的語法分析結果並不相同。

在C中,這個表達式被解析為: e=((a ?b :c)=d) 這是一個錯誤的語義,因為條件-表達式的結果並不是一個左值。

在C++中,則解析為: e=(a ?b :(c=d)) 這是一個有效的表達式。

位元邏輯運算子的優先級一直受到批評[1]。

在觀念裡,&和|是類似於+和*的數值運算子。

但是,表達式 a&b==7 意謂 a&(b==7) 而 a+b==7 意謂 (a+b)==7 這就需要經常使用圓括號,以免有意料之外的結果。

一元正號運算子可用於運算元表達式的類型提升。

例如下例: templatevoidf(Tconst&a,Tconst&b){}; intmain(){ inta[2]; intb[3]; f(a,b);//won'twork!differentvaluesfor"T"! f(+a,+b);//works!Tis"int*"both } 安全問題[編輯] 下表指出了各個運算子可能導致的安全問題: 符號 安全性 符號 安全性 符號 安全性 符號 安全性 + 溢位,包裹,循環 -= 溢位,包裹,循環,截裁 >> 無 >= 無 - 溢位,包裹,循環 *= 溢位,包裹,循環,截裁 & 無 == 無 * 溢位,包裹,循環 /= 溢位,截裁 ~ 無 != 無 % 溢位 <<= 溢位,包裹,循環,截裁 ! 無 && 無 ++ >>= 截裁 un+ 無 || 無 -- &= 截裁 un- 溢位,包裹,截裁 ?: 無 = |= 截裁 < 無 <=> += << 溢位,包裹,截裁 > 無 參閱[編輯] C C++ 參考資料[編輯] ^TheDevelopmentoftheCLanguage.[2007-03-01].(原始內容存檔於2015-02-03).  外部連結[編輯] Experimentalresults(頁面存檔備份,存於網際網路檔案館)showingthatdevelopershavepoorknowledgeofbinaryoperatorprecedence. Basictypes&Operators(頁面存檔備份,存於網際網路檔案館) 閱論編C++ C++98 C++03 C++11 C++14 C++17 C++20 C++23 特性 類 例外處理 函式多載 new和delete 運算子多載 運算子 模板 標準庫 I/O流 智慧型指標 STL 字串 編譯器 BorlandC++ BorlandTurboC++ C++Builder Clang GCC IntelC++編譯器 SunStudio VisualC++ WatcomC/C++編譯器 IDE Anjuta CLion(英語:CLion) Code::Blocks CodeLite(英語:CodeLite) Eclipse Geany MicrosoftVisualStudio NetBeans KDevelop QtCreator 方言 EmbeddedC++ 與其它語言的對照 C和C++的對照 Java和C++的對照 程式語言的對照(英語:Comparisonofprogramminglanguages) 分類 取自「https://zh.wikipedia.org/w/index.php?title=C和C%2B%2B運算子&oldid=67880104」 分類:​C語言C++運算符(編程) 導覽選單 個人工具 沒有登入討論貢獻建立帳號登入 命名空間 條目討論 臺灣正體 不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體 查看 閱讀編輯檢視歷史 更多 搜尋 導航 首頁分類索引特色內容新聞動態近期變更隨機條目資助維基百科 說明 說明維基社群方針與指引互助客棧知識問答字詞轉換IRC即時聊天聯絡我們關於維基百科 工具 連結至此的頁面相關變更上傳檔案特殊頁面靜態連結頁面資訊引用此頁面維基數據項目 列印/匯出 下載為PDF可列印版 其他語言 EnglishEspañolMagyar日本語한국어МакедонскиPortuguêsРусскийСрпски/srpskiУкраїнська 編輯連結



請為這篇文章評分?