2016-12-05 2 views
1

Helfen Sie mir, richtig zu erklären, warum Literal kein Objekt in C++ ist.Literale sind keine Objekte?

Meine Erklärung ist: "Genau genommen können wir nicht denken, dass Literale Objekte sind. Literale sind prvalues, die Stringliterale ausschließen. Oft sind prvalues ​​Werte, die keinem Objekt zugeordnet sind!"

Diese Erklärung im Einklang mit der C++ standart (siehe auch here). Vielleicht gibt es eine andere Erklärung?

+4

"Literale sind keine Objekte" ist eine falsche Aussage. – George

+0

@George Aber warum? Es gibt einen Anspruch im Standard "Eine Entität ist ein Wert, ein Objekt, eine Referenz, eine Funktion, ein Enumerator, ein Typ, ein Klassenmitglied, eine Vorlage, eine Vorlagenspezialisierung, ein Namespace, ein Parameterpaket oder dies." Ich denke, dass dies bedeutet, dass Werte keine Objekte sind. Und wörtlich ist ein fester Wert. Liege ich falsch? – Rodvi

+1

Ja, obwohl diese Aussage vielleicht etwas verwirrend ist, ein Wert, ref, (instanziert oder statisch) Klassenmitglied, und das sind alle Objekte. Genauso wie "das" ein Klassenmitglied ist. Sie sollten sich wahrscheinlich [The Definitive C++ Buch Guide and List] ansehen (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – George

Antwort

0

Ein wörtliche ist ein deklaratives Objekt, aber ich denke, dass vielleicht Sie werden immer auf einer Unterscheidung, der Primitiven und Gegenstände aufgehängt. Primitive sind Objekte und können leicht als Objekte betrachtet werden, aber aufgrund der Notation und des Fehlens von Mitgliedern kann man leicht erkennen, warum sie als Objekte wahrgenommen werden können. Daher ist es leicht zu verstehen, warum man denken könnte, dass ein Literal kein Objekt ist, weil Literale normalerweise Grundelemente definieren (nicht viele komplexe Datenstrukturen sind in Literalen leicht zu definieren).

jedoch ein primitives ist ein Objekt (kein brauchbarer Grund, sie als Objekte nicht definieren), weil es ein Mitglied einer Art ist. Da es sich also nur um eine statische Definition eines Objekts handelt, sind sie auch ein Objekt, mit dem wir nicht genauso interagieren wie mit anderen Objekten, weil sie statisch sind.

Während die Idee, dass ein Literal kein Objekt ist, wahrscheinlich keine Probleme im Code verursachen wird, kann es OOP komplizierter machen, besonders da die Idee von OOP darin besteht, dass wir mit Objekten in der Programmierung interagieren sollten, weil wir damit interagieren alles außerhalb der Programmierung.

Verwandte Themen