Warum gilt in C++ int a {}; nur als Deklaration / Definition?
Also es gibt ja 3 Mögichkeiten:
Deklaration; Heißt einfach nur dass man dem Compiler sagt: "es existiert eine Varaiable dieses Typs und mit diesem Namen", also zb int a; oder int function ();
Definition; Heißt dass man alle Informationen über eine Variable / eine Funktion mitliefert, also zb int function () { ... return 1}
Initialisierung; Heißt dass man einer Variable einen Wert zuweist, also zb int a = 13;
Warum gilt aber eine Variable wie zb hier: int a {}; nur als Deklariert und Definiert, jedoch nicht als Initialisiert ? Weil die leere {} liste heißt doch in c++ dass die Variable den Wert 0 bekommt. Damit ist es doch eine Initialisierung ?
und Was wäre dann int a {14}; ? EIne Definition und Initialisierung ? Wenn ja, warum ?
Danke für eure Antworten :)
2 Antworten
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
int a {}; nur als Deklariert und Definiert
wer sagt das den ? das keine zero-initialiserung erfolgt.
durch die Uniform Initialization seit 2011 ist es eine zero-initialization und sollte auch inzwischen bei allen compilern eingebaut worden sein .
https://en.cppreference.com/w/cpp/language/value_initialization
int n{}; // scalar => zero-initialization, the value is 0
selbst bei struct ist es so
// No constructor
struct TempData
{
int StationId;
time_t timeSet;
double current;
double maxTemp;
double minTemp;
};
int main()
{
// Default initialization = {0,0,0,0,0}
TempData td_default{};
}
und hier wann eine initialisierung statt findet
https://en.cppreference.com/w/cpp/language/value_initialization
int a {14}; => EIne Definition und Initialisierung mit einem bestimmten wert
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
da hat dein Lehrer eine veraltete klausur , passierst ständig sogar bei der IHK , die schreiben nur ab was in den damaligen klausuren vor kam .
fakt ist, seit 2011 ist es eine zero-initialiserung durch Uniform Initialization
sorry, aber einige dozenten bilden sich nciht weiter, sie sind keine programmierer und machen copy paste . den punkt kann man sich also bei falscher antwort zurück holen .
was glaubste was bei php 5.6 zu php 7.x passiert ... da ist es noch schlimmer, da hat sich soviel verändert das dozenten und lehrer quasi im letzten jahrtausend leben .-
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Gemein wäre natürlich,, wenn explizit ein bestimmter Standard verlangt wäre (der nicht aktuell sein muß).
![](https://images.gutefrage.net/media/user/TechPech1984/1632773764038_nmmslarge__12_0_519_519_b8bdbc8023c4e7722d66db9f2af2d5fd.png?v=1632773764000)
wie sinnvoll ist das denn ;) lernen sie bitte wieder das flache erde model ;) und die zentrische welt anschauung ;) das werden sie bei youtube videos noch sehr offt gebrauchen können ;) code vor 2011 sollte nicht mehr in den wartungslisten auftauchen !
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Ach komm, ein bisschen MOS 6502-ASM hat noch keinem geschadet *lach*.
IMHO sind derartige Frage bei sich verändernden Standards in Klausuren eh deplatziert - was soll das bringen. Dann lieber explizit erklären lassen, wo die Unterschiede liegen und den Prüfling ein Beispiel geben lassen.
![](https://images.gutefrage.net/media/user/newcomer/1444744096_nmmslarge.jpg?v=1444744096000)
nun die Variable wird als Integer Zahl definiert aber ihr wird kein Wert zugewiesen
![](https://images.gutefrage.net/media/user/newcomer/1444744096_nmmslarge.jpg?v=1444744096000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/newcomer/1444744096_nmmslarge.jpg?v=1444744096000)
wenn man eine Integer Variable definiert wird die automatisch auf Null gesetzt
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Das ist sehr gut zu wissen, da das eine Frage in der Probeklausur war. Dort hieß es:
int a {};
Was würde mit dieser variable gemacht ? Die richtige Antwort war deklariert und definiert, aber nicht initialisiert....
Ich werde Mal eine Frage im Forum Posten