名稱空間
變體
操作

表示式

來自 cppreference.com
< c‎ | language

表示式是運算子及其運算元的序列,用於指定一個計算。

表示式求值可能會產生結果(例如,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
(type) a
a ? b : c
sizeof


_Alignof
(C11 起)
(直至 C23)

alignof
(自 C23 起)

[編輯] 轉換

  • 當運算元型別與運算子期望的型別不匹配時,會發生隱式轉換
  • 強制型別轉換可用於顯式地將值從一種型別轉換為另一種型別。

[編輯] 其他

  • 常量表達式可以在編譯時求值,並在編譯時上下文中使用(非變長陣列(C99 起)陣列大小、靜態初始化器等)
  • 泛型選擇可以根據引數的型別執行不同的表示式
(C11 起)
(C99 起)

[編輯] 主表示式

任何運算子的運算元可以是其他表示式,也可以是主表示式(例如,在 1 + 2 * 3 中,運算子 + 的運算元是子表示式 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[] 型別的字元序列,表示以 null 結尾的字串。
  • 複合字面量是直接嵌入程式程式碼的結構體、聯合體或陣列型別的值
(C99 起)

[編輯] 未求值表示式

sizeof 運算子的運算元是未求值的表示式(除非它們是變長陣列)(C99 起)。因此,size_t n = sizeof(printf("%d", 4)); 不會執行控制檯輸出。

_Alignof(C23 前)alignof(C23 起) 運算子的運算元、泛型選擇的控制表示式,以及作為 _Alignof(C23 前)alignof(C23 起) 運算元的可變長陣列的大小表示式也是未求值的表示式。

(C11 起)

[編輯] 引用

  • C23 標準 (ISO/IEC 9899:2024)
  • 6.5 表示式 (p: 待定)
  • 6.6 常量表達式 (p: 待定)
  • 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++ 文件關於表示式