命名空间
变体
动作

表达式

出自 cppreference.cn
< 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
(type) a
a ? b : c
sizeof


_Alignof
(since C11)
(until C23)

alignof
(since C23)

[编辑] 转换

  • 隐式转换发生在操作数的类型与运算符的预期不符时
  • 强制类型转换可用于显式地将值从一种类型转换为另一种类型。

[编辑] 其他

  • 常量表达式可以在编译时求值,并用于编译时上下文(非 VLA(自 C99 起)数组大小、静态初始化器等)
  • 泛型选择可以根据参数的类型执行不同的表达式
(since C11)
(since C99)

[编辑] 主表达式

任何运算符的操作数可以是其他表达式,也可以是主表达式(例如,在 1 + 2 * 3 中,运算符 + 的操作数是子表达式 2 * 3 和主表达式 1)。

主表达式是以下任何一种

1) 常量和字面量(例如,2"Hello, world"
2) 适当声明的 标识符(例如,nprintf
(since C11)

括号中的任何表达式也被归类为主表达式:这保证了括号的优先级高于任何运算符。

[编辑] 常量和字面量

某些类型的常量值可以使用称为字面量(对于左值表达式)和常量(对于非左值表达式)的专用表达式嵌入到 C 程序的源代码中

  • 整型常量是整数类型的十进制、八进制或十六进制数字。
  • 字符常量int 类型的单个字符,适合转换为字符类型,或 char8_t(自 C23 起) char16_tchar32_t(自 C11 起) wchar_t 类型的单个字符
  • 浮点常量floatdoublelong double 类型的值
(since C23)
  • 字符串字面量char[]char8_t[](自 C23 起)char16_t[]char32_t[](自 C11 起)wchar_t[] 类型的字符序列,表示以空字符结尾的字符串
  • 复合字面量是直接嵌入在程序代码中的结构体、联合体或数组类型的值
(since C99)

[编辑] 未求值的表达式

sizeof 运算符的操作数是未求值的表达式(除非它们是 VLA)(自 C99 起)。因此,size_t n = sizeof(printf("%d", 4)); 不会执行控制台输出。

_Alignof(截至 C23)alignof(自 C23 起) 运算符的操作数、泛型选择的控制表达式以及作为 _Alignof(截至 C23)alignof(自 C23 起) 操作数 VLA 的大小表达式也是未求值的表达式。

(since 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++ 文档 关于 表达式