運算式
運算式是由運算子及其運算元組成的序列,用於指定計算過程。
運算式的求值可能會產生結果(例如:求值 2 + 2 會產生結果 4)、可能會產生副作用(例如:求值 printf("%d", 4) 會將字元 '4' 送至標準輸出串流),並可能指定物件或函式。
目錄 |
[編輯] 概論
[編輯] 運算子
| 常用運算子 | ||||||
|---|---|---|---|---|---|---|
| 賦值 | 遞增 遞減 |
算術 | 邏輯 | 比較 | 成員 存取 |
其他 |
|
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
[編輯] 轉換
- 隱含轉換發生在運算元的型別與運算子所預期的型別不匹配時
- 強制轉型 (Casts) 可用於將值從一種型別明確轉換為另一種型別。
[編輯] 其他
- 常數運算式可在編譯時期進行求值,並用於編譯時期上下文(非 VLA(C99 起)陣列大小、靜態初始化器等)
|
(自 C11 起) |
|
(自 C99 起) |
[編輯] 初級運算式
任何運算子的運算元可以是其他運算式,也可以是初級運算式(例如在 1 + 2 * 3 中,operator+ 的運算元是子運算式 2 * 3 和初級運算式 1)。
初級運算式包含以下任一項:
|
3) 泛型選擇
|
(自 C11 起) |
任何括在括號中的運算式也被歸類為初級運算式:這保證了括號具有高於任何運算子的優先級。
[編輯] 常數與字面量
特定型別的常數值可以使用「字面量」(用於左值運算式)和「常數」(用於非左值運算式)這些特殊運算式嵌入在 C 程式原始碼中。
- 整數常數是整數型別的十進位、八進位或十六進位數字。
- 字元常數是 int 型別的個別字元,適合轉換為字元型別,或者為 char8_t,(C23 起) char16_t、char32_t 或(C11 起) wchar_t 型別。
- 浮點常數是 float、double 或 long double 型別的值。
|
(C23 起) |
- 字串字面量是 char[], char8_t[](C23 起), char16_t[], char32_t[],(C11 起) 或 wchar_t[] 型別的字元序列,代表以空字元終止的字串。
|
(自 C99 起) |
[編輯] 未求值運算式
sizeof 運算子的運算元是不會被求值的運算式(除非它們是 VLA)(C99 起)。因此,size_t n = sizeof(printf("%d", 4)); 不會執行控制台輸出。
|
|
(自 C11 起) |
[編輯] 參考
- C23 標準 (ISO/IEC 9899:2024)
- 6.5 運算式 (p: TBD)
- 6.6 常數運算式 (p: TBD)
- C17 標準 (ISO/IEC 9899:2018)
- 6.5 運算式 (p: 55-75)
- 6.6 常數運算式 (p: 76-77)
- C11 標準 (ISO/IEC 9899:2011)
- 6.5 運算式 (p: 76-105)
- 6.6 常數運算式 (p: 106-107)
- C99 標準 (ISO/IEC 9899:1999)
- 6.5 運算式 (p: 67-94)
- 6.6 常數運算式 (p: 95-96)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 3.3 運算式
- 3.4 常數運算式
[編輯] 參見
| C++ 文件 關於 運算式
|