热门问题
时间线
聊天
视角

C和C++運算子

来自维基百科,自由的百科全书

Remove ads

所有的C语言运算符都被C++语言支持。C语言不支持运算符重载

在不重载时,运算符&&||,逗号运算符),在第一个操作数求值之后有一个顺序点

大部分C与C++运算符也可用于其它程序设计语言如C#JavaPerlPHP等,具有相同的优先级、结合性与语义。

運算子優先級

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

更多信息 优先级, 運算子 ...
Remove ads

列表

在本表中,abc代表有效值(來自變數或返回值的逐字常數或數值)、物件名稱,或適當的左值。

算術運算子

更多信息 運算子名稱, 語法 ...

比較運算子

更多信息 運算子名稱, 語法 ...

位元運算子

更多信息 運算子名稱, 語法 ...

其它運算子

更多信息 運算子名稱, 語法 ...

語言擴展

更多信息 運算子名稱, 語法 ...

註解

在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

這就需要經常使用圓括號,以免有意料之外的結果。

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

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  
}
Remove ads

安全问题

下表指出了各个运算符可能导致的安全问题:

更多信息 符號, 安全性 ...

參閱

參考資料

Loading content...

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads