Expressions
Выражение — это последовательность операторов и их операндов , которая определяет вычисление.
Вычисление выражения может давать результат (например, вычисление 2 + 2 дает результат 4 ), может вызывать побочные эффекты (например, вычисление printf ( "%d" , 4 ) отправляет символ '4' в стандартный поток вывода), а также может обозначать объекты или функции.
Содержание |
Общее
- категории значений (lvalue, non-lvalue object, function designator) классифицируют выражения по их значениям
- порядок вычисления аргументов и подвыражений определяет последовательность получения промежуточных результатов
Операторы
| Общие операторы | ||||||
|---|---|---|---|---|---|---|
| присваивание |
инкремент
декремент |
арифметические | логические | сравнения |
доступа к членам
доступа |
другие |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
- приоритет операторов определяет порядок, в котором операторы связываются со своими аргументами
- альтернативные представления являются альтернативными написаниями для некоторых операторов
Преобразования
- Неявные преобразования происходят, когда типы операндов не соответствуют ожиданиям операторов
- Приведения типов могут использоваться для явного преобразования значений из одного типа в другой.
Другое
- константные выражения могут вычисляться на этапе компиляции и использоваться в контексте времени компиляции ( не-VLA (since C99) размеры массивов, статические инициализаторы и т.д.)
|
(since C11) |
|
(начиная с C99) |
Первичные выражения
Операндами любого оператора могут быть другие выражения или они могут быть первичными выражениями (например, в 1 + 2 * 3 , операндами operator+ являются подвыражение 2 * 3 и первичное выражение 1 ).
Первичные выражения — это любое из следующего:
| (начиная с C11) |
Любое выражение в скобках также классифицируется как первичное выражение: это гарантирует, что скобки имеют более высокий приоритет, чем любой оператор.
Константы и литералы
Постоянные значения определенных типов могут быть внедрены в исходный код программы на C++ с использованием специализированных выражений, известных как литералы (для lvalue-выражений) и константы (для не-lvalue выражений)
- целочисленные константы — это десятичные, восьмеричные или шестнадцатеричные числа целого типа.
- символьные константы — это отдельные символы типа int , подходящие для преобразования в символьный тип, или типа char8_t , (since C23) char16_t , char32_t , или (since 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) |
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 6.5 Выражения (стр.: TBD)
-
- 6.6 Константные выражения (стр.: 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++ documentation
для
Expressions
|