Namespaces
Variants

Expressions

From cppreference.net

表达式是由 运算符 及其 操作数 组成的序列,用于指定计算过程。

表达式求值可能产生结果(例如,对 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 中,operator+ 的操作数是子表达式 2 * 3 和主表达式 1 )。

基本表达式可以是以下任意一种:

1) 常量与字面量(例如 2 "Hello, world"
2) 适当声明的 标识符 (例如 n printf
(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 运算符 的操作数是不被求值的表达式 (除非它们是可变长度数组) (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: TBD)
  • 6.6 常量表达式 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 6.5 表达式 (页码: 55-75)
  • 6.6 常量表达式 (页码: 76-77)
  • C11标准(ISO/IEC 9899:2011):
  • 6.5 表达式(页码:76-105)
  • 6.6 常量表达式(页码:106-107)
  • C99标准(ISO/IEC 9899:1999):
  • 6.5 表达式(页码:67-94)
  • 6.6 常量表达式(页码:95-96)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 3.3 表达式
  • 3.4 常量表达式

参见

C++ 文档 关于 表达式