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
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
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 .-
Gemein wäre natürlich,, wenn explizit ein bestimmter Standard verlangt wäre (der nicht aktuell sein muß).
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 !
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.
nun die Variable wird als Integer Zahl definiert aber ihr wird kein Wert zugewiesen
wenn man eine Integer Variable definiert wird die automatisch auf Null gesetzt
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