Espacios de nombres
Variantes

Expresiones

De cppreference.com

Una expresión es una secuencia de operadores y sus operandos, los cuales especifican una computación.

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

General

  • categorías de valor (l-valor, objeto no l-valor, designador de función) clasifican las expresiones por su valores
  • orden de evaluación de argumentos y sub-expresiones especifica el orden en el cual los resultados intermedios son obtenidos.

Operadores

Operadores comúnes
asignación incremento
decremento
aritmética lógico comparación miembro
acceso
otro

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 ? : sizeof _Alignof

Conversiones

  • Conversiones implícitas tienen lugar cuando los tipos de operadores no coinciden con las expectativas de los operadores
  • Conversiones pueden ser usadas para convertir explícitamente valores de un tipo a otro.

Otras

  • Expresiones constantes pueden ser evaluadas en tiempo de compilación y usadas en el contexto en tiempo de compilación (no-VLA tamaño de array, inicializador estático, etc)

Expresiones primarias

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

Las expresiones primarias son cualquiera de las siguientes:

1) Constantes and literales (p.ej. 2 o "Hola, mundo")
2) identificadores declarados convenientemente (p.ej. n o printf)
(desde C11)

Cualquier expresión en paréntesis también se clasifica como una expresión primaria: esto garantiza que el paréntesis tiene mayor precedencia que cualquier operador.

Constantes y literales

Los valores constantes de ciertos tipos pueden ser embebidos en el código fuente de un programa en C usando expresiones especializadas conocidas como literales (para expresiones de l-valor) y constantes (para expresiones no l-valor)

  • Constantes enteras son números decimales, octales, o hexadecimales de tipo entero.
  • Constantes de caracteres son caracteres individuales de tipo int adecuadas para conversión a un tipo carácter o de tipo char16_t, char32_t, o wchar_t
  • Constantes de coma-flotante son valores de tipo float, double, o long double
  • Literales de cadena son secuencias de caracteres de tipo char[], char16_t[], char32_t[], o wchar_t[] que representan cadenas con terminación null.
  • Literales compuestos son valores de tipo estructura, unión, o array directamente embebidas en el código fuente.

Expresiones no evaluadas

Los operandos de el operador sizeof son expresiones que no son evaluadas (a menos que sean VLAs) . Esto es, size_t n = sizeof(printf("%d", 4)); no realiza la salida a la consola.

Los operandos de el operador _Alignof, la expresión de control de una selección genérica, y expresiones de tamaños de VLA que son operandos de _Alignof también son expresiones que no son evaluadas.

Referencias

  • C17 standard (ISO/IEC 9899:2018):
  • 6.5 Expressions (p: 55-75)
  • 6.6 Constant expressions (p: 76-77)
  • Standard C11 (ISO/IEC 9899:2011):
  • 6.5 Expressions (p: 76-105)
  • 6.6 Constant expressions (p: 106-107)
  • Standard C99 (ISO/IEC 9899:1999):
  • 6.5 Expressions (p: 67-94)
  • 6.6 Constant expressions (p: 95-96)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 3.3 EXPRESSIONS
  • 3.4 CONSTANT EXPRESSIONS

Véase también

Documentación de C++ para Expressions