Namespaces
Variants

Expressions

From cppreference.net

Una expresión es una secuencia de operadores y sus operandos , que especifica un cálculo.

La evaluación de expresiones puede producir un resultado (por ejemplo, la evaluación de 2 + 2 produce el resultado 4 ), puede generar efectos secundarios (por ejemplo, la evaluación de printf ( "%d" , 4 ) envía el carácter '4' al flujo de salida estándar), y puede designar objetos o funciones.

Contenidos

General

  • categorías de valor (lvalue, non-lvalue object, function designator) clasifican expresiones por sus valores
  • orden de evaluación de argumentos y subexpresiones especifica el orden en que se obtienen los resultados intermedios

Operadores

Operadores comunes
asignación incremento
decremento
aritméticos lógicos comparación acceso a
miembros
otros

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
(desde C11)
(hasta C23)

alignof
(desde C23)

Conversiones

  • Conversiones implícitas ocurren cuando los tipos de los operandos no coinciden con las expectativas de los operadores
  • Casts pueden utilizarse para convertir explícitamente valores de un tipo a otro.

Otros

  • expresiones constantes pueden evaluarse en tiempo de compilación y usarse en contexto de compilación ( no-VLA (desde C99) tamaños de arreglo, inicializadores estáticos, etc)
(desde C11)
(desde C99)

Expresiones primarias

Los operandos de cualquier operador pueden ser otras expresiones o pueden ser expresiones primarias (por ejemplo, en 1 + 2 * 3 , los operandos del operador+ son la subexpresión 2 * 3 y la expresión primaria 1 ).

Las expresiones primarias son cualquiera de las siguientes:

1) Constantes y literales (por ejemplo, 2 o "Hello, world" )
2) Identificadores declarados apropiadamente identifiers (por ejemplo n o printf )
(desde C11)

Cualquier expresión entre paréntesis también se clasifica como una expresión primaria: esto garantiza que los paréntesis tengan mayor precedencia que cualquier operador.

Constantes y literales

Los valores constantes de ciertos tipos pueden incorporarse en el código fuente de un programa C++ mediante expresiones especializadas conocidas como literales (para expresiones lvalue) y constantes (para expresiones no lvalue)

  • constantes enteras son números decimales, octales o hexadecimales de tipo entero.
  • constantes de carácter son caracteres individuales de tipo int aptos para conversión a un tipo carácter o de tipo char8_t , (since C23) char16_t , char32_t , o (since C11) wchar_t
  • constantes flotantes son valores de tipo float , double , o long double
(desde C23)
  • literales de cadena son secuencias de caracteres de tipo char [ ] , char8_t [ ] (desde C23) , char16_t [ ] , char32_t [ ] , (desde C11) o wchar_t [ ] que representan cadenas terminadas en nulo
(desde C99)

Expresiones no evaluadas

Los operandos del sizeof operador son expresiones que no se evalúan (a menos que sean VLA) (desde C99) . Por lo tanto, size_t n = sizeof ( printf ( "%d" , 4 ) ) ; no realiza salida a consola.

Los operandos del operador _Alignof (hasta C23) alignof (desde C23) , la expresión controladora de una selección genérica , y las expresiones de tamaño de VLA que son operandos de _Alignof (hasta C23) alignof (desde C23) también son expresiones que no se evalúan.

(desde C11)

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 6.5 Expresiones (p: TBD)
  • 6.6 Expresiones constantes (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.5 Expresiones (p: 55-75)
  • 6.6 Expresiones constantes (p: 76-77)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.5 Expressions (p: 76-105)
  • 6.6 Constant expressions (p: 106-107)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 6.5 Expresiones (p: 67-94)
  • 6.6 Expresiones constantes (p: 95-96)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 3.3 EXPRESSIONS
  • 3.4 CONSTANT EXPRESSIONS

Véase también

Documentación de C++ para Expressions