Als «language-lawyer» getaggte Fragen

Bei Fragen zu den Feinheiten formaler oder maßgeblicher Spezifikationen von Programmiersprachen und -umgebungen.

7
Verwirrung über die Array-Initialisierung in C.
Wenn Sie in der Sprache C ein Array wie folgt initialisieren: int a[5] = {1,2}; dann werden alle Elemente des Arrays, die nicht explizit initialisiert wurden, implizit mit Nullen initialisiert. Aber wenn ich ein Array wie dieses initialisiere: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); Ausgabe: …

4
Ist eine Nullreferenz möglich?
Ist dieser Code gültig (und definiertes Verhalten)? int &nullReference = *(int*)0; Sowohl g ++ und Klirren ++ kompilieren , ohne jede Vorwarnung, auch bei der Verwendung von -Wall, -Wextra, -std=c++98, -pedantic, -Weffc++... Natürlich ist die Referenz nicht wirklich null, da nicht auf sie zugegriffen werden kann (dies würde bedeuten, dass …

8
Ist "else if" ein einzelnes Schlüsselwort?
Ich bin neu in C ++. Ich sehe oft bedingte Aussagen wie folgt: if statement_0; else if statement_1; Frage: Soll ich syntaktischelse if als ein einzelnes Schlüsselwort behandeln? Oder ist es tatsächlich eine verschachtelte ifAnweisung innerhalb des Äußeren elsewie unten? if statement_0; else if statement_1;


2
Hat dieser Code aus Abschnitt 4.3.6 der 4. Ausgabe von „The C ++ Programming Language“ ein genau definiertes Verhalten?
In Bjarne Stroustrups The C ++ Programming Language 4. Ausgabe, Abschnitt 36.3.6 STL-ähnliche Operationen, wird der folgende Code als Beispiel für die Verkettung verwendet : void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( …



2
Wann wirken sich zusätzliche Klammern anders als auf die Priorität des Operators aus?
Klammern in C ++ werden an vielen Stellen verwendet: z. B. in Funktionsaufrufen und Gruppierungsausdrücken, um die Priorität von Operatoren zu überschreiben. Abgesehen von illegalen zusätzlichen Klammern (wie z. B. Argumentlisten für Funktionsaufrufe) ist eine allgemeine, aber nicht absolute Regel von C ++, dass zusätzliche Klammern niemals schaden : 5.1 …




8
Effiziente Besetzung ohne Vorzeichen, um ein von der Implementierung definiertes Verhalten zu vermeiden
Ich möchte eine Funktion definieren, die ein unsigned intas-Argument verwendet und ein intkongruentes Modulo UINT_MAX + 1 an das Argument zurückgibt. Ein erster Versuch könnte so aussehen: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Wie jeder Sprachanwalt weiß, ist das Casting von nicht signiert zu signiert für Werte größer als …


8
Können Zweige mit undefiniertem Verhalten als nicht erreichbar angenommen und als toter Code optimiert werden?
Betrachten Sie die folgende Aussage: *((char*)NULL) = 0; //undefined behavior Es ruft eindeutig undefiniertes Verhalten hervor. Bedeutet das Vorhandensein einer solchen Anweisung in einem bestimmten Programm, dass das gesamte Programm undefiniert ist oder dass das Verhalten erst dann undefiniert wird, wenn der Kontrollfluss diese Anweisung trifft? Wäre das folgende Programm …

3
Wann sollte ich @classmethod verwenden und wann def method (self)?
Bei der Integration einer Django-App, die ich zuvor noch nicht verwendet habe, habe ich zwei verschiedene Möglichkeiten gefunden, um Funktionen in Klassen zu definieren. Der Autor scheint beide sehr absichtlich zu verwenden. Der erste ist einer, den ich selbst oft benutze: class Dummy(object): def some_function(self,*args,**kwargs): do something here self is …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.