(Translated by https://www.hiragana.jp/)
C和C++運算子 - 维基百科,自由的百科全书

CC++運算うんざん

所有しょゆうてきC语言运算C++语言支持しじ。C语言支持しじ运算じゅう

ざいじゅう载时,运算&&||,逗号运算),ざいだい一个操作数求值之后有一个顺序てん

だい部分ぶぶんCあずかC++运算也可よう于其它程じょ设计语言如C#JavaPerlPHPひとし具有ぐゆうしょうどうてき优先级、结合せいあずか语义。

運算うんざん優先ゆうせんきゅう

编辑

以下いかC++ほどしきげんちゅうてき所有しょゆう運算うんざんてき優先ゆうせんきゅう結合けつごうせいれつひょう

优先级 運算うんざん 敘述 しめせれい じゅう载性 結合けつごうせい
1 :: 作用さよういき解析かいせき(C++专有) Class::age = 2; いや よしひだりいたりみぎ
2 ++ きさき缀递ぞう i++
-- きさき缀递减 i--
() 函数かんすう调用ある函数かんすう调用形式けいしきてき类型转换 int x = f();
[] かず组访问 array[4] = 2;
. 以对ぞう方式ほうしき访问なり obj.age = 34; いや
-> 以指针方しき访问なり ptr->age = 34;
dynamic_cast 运行时检查类がた转换(C++专有) Y& y = dynamic_cast<Y&>(x); いや
static_cast 经检查的类型转换(C++专有) Y& y = static_cast<Y&>(x); いや
reinterpret_cast 重定しげさだ义类がた转换(C++专有) int const* p = reinterpret_cast<int const*>(0x1234); いや
const_cast 更改こうかい非常ひじょうりょう属性ぞくせい(C++专有) int* q = const_cast<int*>(p); いや
typeid 获取类型しんいき(C++专有) std::type_info const& t = typeid(x); いや
3 ++ ぜん缀递ぞう ++i よしみぎいたりひだり
-- ぜん缀递减 --i
+ いち元正がんしょうごう int i = +1;
- 一元いちげん负号 int i = -1;
!
not
逻辑
!てき备用拼写
if (!done) …
~
compl
按位はん
~てき备用拼写
flag1 = ~flag2;
(type) 强制きょうせい类型转换 int i = (int)floatNum;
* ゆび指向しこうてき int data = *intPtr;
& 变量てき int *intPtr = &data;
sizeof 某某ぼうぼうてき大小だいしょう size_t s = sizeof(int); いや
new 动态ないそん分配ぶんぱい(C++专有) long* pVar = new long;
new[] 动态すう组内そん分配ぶんぱい(C++专有) long* array = new long[20];
delete 动态ないそん释放(C++专有) delete pVar;
delete[] 动态すう组内そん释放(C++专有) delete [] array;
4 .* なり员对ぞう选择(C++专有) obj.*var = 24; いや よしひだりいたりみぎ
->* なり员指针选择(C++专有) ptr->*var = 24;
5 * 乘法じょうほう int i = 2 * 4;
/ 除法じょほう float f = 10.0 / 3.0;
% すうすう int rem = 4 % 3;
6 + 加法かほう int i = 2 + 3;
- 減法げんぽう int i = 5 - 1;
7 << くらいもとひだりうつり int flags = 33 << 1;
>> くらいもとみぎうつり int flags = 33 >> 1;
8 <=> さん较(C++20 auto flags = 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 さんげん条件じょうけん运算 int i = a > b ? a : b; いや よしみぎいたりひだり
17 = 直接ちょくせつ赋值 int a = 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 ほう异常 throw EClass("Message"); いや
19 , 逗號運算うんざん for (i = 0, j = 0; i < 10; i++, j++) … よしひだりいたりみぎ

れつひょう

编辑

ざいほんひょうちゅうabc代表だいひょう有效ゆうこう值(らい變數へんすうあるかえしかい值的逐字ちくじ常數じょうすうあるすう值)、物件ぶっけん名稱めいしょうある適當てきとうてきひだり值。

算術さんじゅつ運算うんざん

编辑
運算うんざん名稱めいしょう 語法ごほう おも 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语言うらゆう
しょう a < b これ これ
しょう於或とう a <= b これ これ
だい a > b これ これ
だい於或とう a >= b これ これ
不等ふとう a != b これ これ
とう a == b これ これ
邏輯はん !a これ これ
邏輯 AND a && b これ これ
邏輯 OR a || b これ これ
さん a <=> b これ いや

くらいもと運算うんざん

编辑
運算うんざん名稱めいしょう 語法ごほう おも C语言うらゆう
くらいもとひだりうつり a << b これ これ
以位もとひだりうつり a <<= b これ これ
くらいもとみぎうつり 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 いや いや
てき大小だいしょう sizeof a いや これ
類型るいけい識別しきべつ typeid type いや いや
分配ぶんぱいもうかそん new type これ いや
解除かいじょ分配ぶんぱいもうかそん delete a これ いや

かたりげん擴展

编辑
運算うんざん名稱めいしょう 語法ごほう おも C语言うらゆう 提供ていきょうしゃ
しめぎくじ && label いや これ GCC
取得しゅとくがたたい typeof a
typeof(expr)
いや これ GCC
最小さいしょう最大さいだい a <? b
a >? b
いや いや GCC < 4.3

註解ちゅうかい

编辑

ざいCC++ちゅうたい運算うんざんてき約束やくそくげんてき語法ごほう規範きはんいんもとしょ指定していてきざい對應たいおうてき標準ひょうじゅんちゅう),而不優先ゆうせんきゅうれつひょう。這造成ぞうせいりょういち些微みょうてき衝突しょうとつれい如,ざい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

這就需要じゅよう經常けいじょう使用しようえんくくごう,以免有意ゆういりょう外的がいてき結果けっか

一元正号运算符可用于操作数表达式的类型提升。れい如下れい

template <class T> void f(T const& a, T const& b){};

int main() {
	int a[2];
	int b[3];
	f(a, b); // won't work! different values for "T"!
	f(+a, +b); // works! T is "int*" both  
}

安全あんぜん问题

编辑

下表かひょう指出さしでりょうかく个运さん可能かのう导致てき安全あんぜん问题:

符號ふごう 安全あんぜんせい 符號ふごう 安全あんぜんせい 符號ふごう 安全あんぜんせい 符號ふごう 安全あんぜんせい
+ 溢位,つつみ裹,循環じゅんかん -= 溢位,つつみ裹,循環じゅんかん,截裁 >> >=
- 溢位,つつみ裹,循環じゅんかん *= 溢位,つつみ裹,循環じゅんかん,截裁 & ==
* 溢位,つつみ裹,循環じゅんかん /= 溢位,截裁 ~ !=
% 溢位 <<= 溢位,つつみ裹,循環じゅんかん,截裁 ! &&
++ >>= 截裁 un+ ||
-- &= 截裁 un- 溢位,つつみ裹,截裁 ?:
= |= 截裁 < <=>
+= << 溢位,つつみ裹,截裁 >

まいり

编辑

參考さんこう資料しりょう

编辑
  1. ^ The Development of the C Language. [2007-03-01]. (原始げんし内容ないようそん于2015-02-03). 

外部がいぶ連結れんけつ

编辑