热门问题
时间线
聊天
视角

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