Namespaces
Variants

Expressions

From cppreference.net

Выражение — это последовательность операторов и их операндов , которая определяет вычисление.

Вычисление выражения может давать результат (например, вычисление 2 + 2 дает результат 4 ), может вызывать побочные эффекты (например, вычисление printf ( "%d" , 4 ) отправляет символ '4' в стандартный поток вывода), а также может обозначать объекты или функции.

Содержание

Общее

  • категории значений (lvalue, non-lvalue object, function designator) классифицируют выражения по их значениям
  • порядок вычисления аргументов и подвыражений определяет последовательность получения промежуточных результатов

Операторы

Общие операторы
присваивание инкремент
декремент
арифметические логические сравнения доступа к членам
доступа
другие

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)

Преобразования

Другое

  • константные выражения могут вычисляться на этапе компиляции и использоваться в контексте времени компиляции ( не-VLA (since C99) размеры массивов, статические инициализаторы и т.д.)
  • generic selections могут выполнять различные выражения в зависимости от типов аргументов
(since C11)
(начиная с C99)

Первичные выражения

Операндами любого оператора могут быть другие выражения или они могут быть первичными выражениями (например, в 1 + 2 * 3 , операндами operator+ являются подвыражение 2 * 3 и первичное выражение 1 ).

Первичные выражения — это любое из следующего:

1) Константы и литералы (например, 2 или "Hello, world" )
2) Надлежащим образом объявленные идентификаторы (например, n или printf )
(начиная с C11)

Любое выражение в скобках также классифицируется как первичное выражение: это гарантирует, что скобки имеют более высокий приоритет, чем любой оператор.

Константы и литералы

Постоянные значения определенных типов могут быть внедрены в исходный код программы на C++ с использованием специализированных выражений, известных как литералы (для lvalue-выражений) и константы (для не-lvalue выражений)

  • предопределенные константы true / false являются значениями типа bool
  • предопределенная константа nullptr является значением типа nullptr_t
(начиная с C23)
  • строковые литералы представляют собой последовательности символов типа char [ ] , char8_t [ ] (начиная с C23) , char16_t [ ] , char32_t [ ] , (начиная с C11) или wchar_t [ ] которые представляют нуль-терминированные строки
  • составные литералы — это значения структурного, объединённого или массивообразного типа, непосредственно встраиваемые в программный код
(начиная с C99)

Невычисляемые выражения

Операнды sizeof оператора являются выражениями, которые не вычисляются (если они не являются VLA) (начиная с C99) . Таким образом, size_t n = sizeof ( printf ( "%d" , 4 ) ) ; не выполняет вывод на консоль.

Операнды оператора _Alignof (до C23) alignof (начиная с C23) , управляющее выражение generic selection и выражения размера VLA, которые являются операндами _Alignof (до C23) alignof (начиная с C23) также являются выражениями, которые не вычисляются.

(начиная с 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