Namespaces
Variants

Expressions

From cppreference.net

Ein Ausdruck ist eine Sequenz von Operatoren und ihren Operanden , die eine Berechnung spezifiziert.

Die Auswertung von Ausdrücken kann ein Ergebnis erzeugen (z.B. ergibt die Auswertung von 2 + 2 das Ergebnis 4 ), kann Nebeneffekte verursachen (z.B. sendet die Auswertung von printf ( "%d" , 4 ) das Zeichen '4' an den Standardausgabestrom), und kann Objekte oder Funktionen bezeichnen.

Inhaltsverzeichnis

Allgemein

  • Wertkategorien (Lvalue, Nicht-Lvalue-Objekt, Funktionsbezeichner) klassifizieren Ausdrücke nach ihren Werten
  • Auswertungsreihenfolge von Argumenten und Teilausdrücken spezifiziert die Reihenfolge, in der Zwischenergebnisse erhalten werden

Operatoren

Häufige Operatoren
Zuweisung Inkrement
Dekrement
Arithmetisch Logisch Vergleich Member-
Zugriff
Sonstige

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
(seit C11)
(bis C23)

alignof
(seit C23)

Konvertierungen

  • Implizite Konvertierungen erfolgen, wenn die Typen von Operanden nicht den Erwartungen der Operatoren entsprechen
  • Casts können verwendet werden, um Werte explizit von einem Typ in einen anderen umzuwandeln.

Sonstiges

  • konstante Ausdrücke können zur Compilezeit ausgewertet werden und in Compilezeit-Kontexten verwendet werden ( nicht-VLA (seit C99) Array-Größen, statische Initialisierer, etc)
(seit C11)
(seit C99)

Primäre Ausdrücke

Die Operanden jedes Operators können andere Ausdrücke sein oder sie können primäre Ausdrücke sein (z.B. in 1 + 2 * 3 sind die Operanden von operator+ der Teilausdruck 2 * 3 und der primäre Ausdruck 1 ).

Primäre Ausdrücke sind einer der Folgenden:

1) Konstanten und Literale (z.B. 2 oder "Hello, world" )
2) Entsprechend deklarierte Bezeichner (z.B. n oder printf )
(seit C11)

Jeder Ausdruck in Klammern wird ebenfalls als primärer Ausdruck klassifiziert: Dies gewährleistet, dass die Klammern eine höhere Priorität als jeder Operator haben.

Konstanten und Literale

Konstante Werte bestimmter Typen können im Quellcode eines C-Programms mittels spezieller Ausdrücke eingebettet werden, die als Literale (für Lvalue-Ausdrücke) und Konstanten (für Nicht-Lvalue-Ausdrücke) bekannt sind.

  • Integer-Konstanten sind dezimale, oktale oder hexadezimale Zahlen vom Ganzzahltyp.
  • Zeichenkonstanten sind einzelne Zeichen vom Typ int , die für die Konvertierung in einen Zeichentyp geeignet sind, oder vom Typ char8_t , (since C23) char16_t , char32_t , oder (since C11) wchar_t
  • Gleitkommakonstanten sind Werte vom Typ float , double , oder long double
(seit C23)
  • String-Literale sind Zeichenfolgen vom Typ char [ ] , char8_t [ ] (seit C23) , char16_t [ ] , char32_t [ ] , (seit C11) oder wchar_t [ ] , die nullterminierte Zeichenketten repräsentieren
  • Compound Literals sind Werte von Struct-, Union- oder Array-Typen, die direkt in den Programmcode eingebettet sind
(seit C99)

Nicht ausgewertete Ausdrücke

Die Operanden des sizeof Operators sind Ausdrücke, die nicht ausgewertet werden (sofern es sich nicht um VLAs handelt) (seit C99) . Daher führt size_t n = sizeof ( printf ( "%d" , 4 ) ) ; zu keiner Konsolenausgabe.

Die Operanden des _Alignof (bis C23) alignof (seit C23) Operators, der steuernde Ausdruck einer generischen Auswahl und Größenausdrücke von VLAs, die Operanden von _Alignof (bis C23) alignof (seit C23) sind, sind ebenfalls Ausdrücke, die nicht ausgewertet werden.

(seit C11)

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 6.5 Ausdrücke (p: TBD)
  • 6.6 Konstante Ausdrücke (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 6.5 Ausdrücke (S: 55-75)
  • 6.6 Konstante Ausdrücke (S: 76-77)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.5 Ausdrücke (S: 76-105)
  • 6.6 Konstante Ausdrücke (S: 106-107)
  • C99-Standard (ISO/IEC 9899:1999):
  • 6.5 Ausdrücke (S. 67-94)
  • 6.6 Konstante Ausdrücke (S. 95-96)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 3.3 AUSDRÜCKE
  • 3.4 KONSTANTE AUSDRÜCKE

Siehe auch

C++ Dokumentation für Expressions