const in C vs. const in C++
Den angegebenen code kompiliert in C, scheitert jedoch in C++.
int main()
{
const int x; /* uninitialized const compiles in C but fails in C++*/
}
Was ist der Grund und der Grund für den Wechsel von C zu C++?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe die Skillung, in der die Kompatibilität Anhang C. 1.6:
const
block-scope-variable, denke ich.const int i; *((int*)&
Beachten Sie, dass es eine legitime Verwendung einer nicht initialisierten const-qualifiziert Objekt automatische Speicherung Dauer: Ihre Adresse genommen werden kann und dient als eindeutiger Schlüssel für die Kennzeichnung rekursionsebenen, die in einer rekursiven Funktion. Dies ist etwas unverständlich, aber erwähnenswert. C macht diese effizienter, während C++ erfordert, dass Sie verschwenden Zeit und code-Größe auf initialisieren. (In der Theorie der compiler könnte vielleicht feststellen, dass der Wert wird nie und optimieren aus der Initialisierung, aber seit Sie vorbei sind um einen Zeiger, das wäre ziemlich schwierig zu beweisen.)
Den
const
Schlüsselwort war eingeführt, um C in C89 1989, hatte aber schon mit C++, seit seiner Gründung im Jahr 1983. So war es "mehr" von C++ zu C.Initialisierung Semantik unterscheiden sich im Allgemeinen in C und C++. Obwohl die meisten der Zeit, die Sie "tun nur das, was Sie erwarten", gibt es Fälle, wo die Unterschiede werden ganz wichtig. C++ ist wirklich nicht eine Obermenge von C, nachdem alle.
Beispielsweise in C++ können Sie nicht:
Aber das ist vollkommen legal in C.
Dem ISO-standard sagt (in 8,5 [dcl.init] Absatz 9):
wenn Sie versuchen, das gleiche Beispiel nach der änderung dieser:
wird es kompiliert. So ist dieses selbst, erklärt die Notwendigkeit der Durchsetzung dieser Fehler in c++ die Deklaration von const vars ohne initialisieren und extern-Verbindung ist von keinem nutzen, so coder muss Hinzugefügt haben, können Sie es durch Fehler.