命名空間
變體
動作

運算式

出自 cppreference.com
< c‎ | 語言

運算式是由運算子及其運算元組成的序列,用於指定計算過程。

運算式的求值可能會產生結果(例如:求值 2 + 2 會產生結果 4)、可能會產生副作用(例如:求值 printf("%d", 4) 會將字元 '4' 送至標準輸出串流),並可能指定物件或函式。

目錄

[編輯] 概論

  • 值類別(左值、非左值物件、函式指示項)依據運算式的值對其進行分類
  • 求值順序(針對引數與子運算式)指定了獲得中間結果的順序

[編輯] 運算子

常用運算子
賦值 遞增
遞減
算術 邏輯 比較 成員
存取
其他

a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &&= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b

a(...)
a, b
(型別) a
a ? b : c
sizeof


_Alignof
(自 C11 起)
(C23 之前)

alignof
(C23 起)

[編輯] 轉換

  • 隱含轉換發生在運算元的型別與運算子所預期的型別不匹配時
  • 強制轉型 (Casts) 可用於將值從一種型別明確轉換為另一種型別。

[編輯] 其他

  • 常數運算式可在編譯時期進行求值,並用於編譯時期上下文(非 VLA(C99 起)陣列大小、靜態初始化器等)
  • 泛型選擇可根據引數的型別執行不同的運算式
(自 C11 起)
(自 C99 起)

[編輯] 初級運算式

任何運算子的運算元可以是其他運算式,也可以是初級運算式(例如在 1 + 2 * 3 中,operator+ 的運算元是子運算式 2 * 3 和初級運算式 1)。

初級運算式包含以下任一項:

1) 常數與字面量(例如 2"Hello, world"
2) 已適當宣告的識別碼(例如 nprintf
(自 C11 起)

任何括在括號中的運算式也被歸類為初級運算式:這保證了括號具有高於任何運算子的優先級。

[編輯] 常數與字面量

特定型別的常數值可以使用「字面量」(用於左值運算式)和「常數」(用於非左值運算式)這些特殊運算式嵌入在 C 程式原始碼中。

  • 整數常數是整數型別的十進位、八進位或十六進位數字。
  • 字元常數int 型別的個別字元,適合轉換為字元型別,或者為 char8_t,(C23 起) char16_tchar32_t(C11 起) wchar_t 型別。
  • 浮點常數floatdoublelong double 型別的值。
(C23 起)
  • 字串字面量char[], char8_t[](C23 起), char16_t[], char32_t[],(C11 起)wchar_t[] 型別的字元序列,代表以空字元終止的字串。
  • 複合字面量是直接嵌入在程式碼中的結構體 (struct)、聯集 (union) 或陣列型別的值。
(自 C99 起)

[編輯] 未求值運算式

sizeof 運算子的運算元是不會被求值的運算式(除非它們是 VLA)(C99 起)。因此,size_t n = sizeof(printf("%d", 4)); 不會執行控制台輸出。

_Alignof(C23 前)alignof(C23 起) 運算子的運算元、泛型選擇的控制運算式,以及作為 _Alignof(C23 前)alignof(C23 起) 運算元的 VLA 大小運算式,也都是不會被求值的運算式。

(自 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++ 文件 關於 運算式
English Deutsch 日本語 中文(简体) 中文(繁體)