表达式
来自cppreference.com
表达式是运算符及其操作数的序列,它指定一个运算。
表达式求值可以产生结果(例如求值 2+2 产生结果 4 ,可能产生副效应(例如求值 printf("%d",4) 会将字符 '4' 送到标准输出流),并可以指代对象或函数。
综述
运算符
常用运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 自增 自减 |
算术 | 逻辑 | 比较 | 成员 访问 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
转换
其他
- 常量表达式可以在编译时求值,并用于编译时语境(非 VLA (C99 起)数组的大小、静态初始化器等)
|
(C11 起) |
|
(C99 起) |
初等表达式
运算符的操作数可为其他表达式,或初等表达式(例如 1+2*3 中,运算符 + 的操作数是子表达式 2*3 和初等表达式 1)。
初等表达式可以是下列之一:
1) 常量及字面量(例如 2 或 "Hello, world")
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 起) |
引用
- C17 标准(ISO/IEC 9899:2018):
- 6.5 Expressions (第 55-75 页)
- 6.6 Constant expressions (第 76-77 页)
- C11 标准(ISO/IEC 9899:2011):
- 6.5 Expressions (第 76-105 页)
- 6.6 Constant expressions (第 106-107 页)
- C99 标准(ISO/IEC 9899:1999):
- 6.5 Expressions (第 67-94 页)
- 6.6 Constant expressions (第 95-96 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 3.3 EXPRESSIONS
- 3.4 CONSTANT EXPRESSIONS