Traditionelle OOP neigt dazu, den Begriff "Objekt" als eine "polymorphe Entität" zu definieren, die Methoden und Daten trägt und von anderen Objekten auf Algorithmen referenziert werden kann.
Die C++ - Definition des Objekts ist - im Wesentlichen - "was auch immer ein Raum braucht, um einen Zustand zu erhalten". Dies führte zu dem Hauptunterschied, dass C++ "Objekte" "Wertverhalten" haben und dass "Methoden" nicht notwendigerweise Mitglieder sind und Objekte nicht notwendigerweise Laufzeit-Polymorphismus unterstützen müssen.
C++ - Programm, das der traditionellen OOP-Definition folgt, endet mit Klassen, die durch (smart) - (Basis) - (Zeiger | Referenz) verwiesen werden, wobei der Umleitungsmechanismus als Schlüssel zum Auflösen von Polymorphismus zur Laufzeit verwendet wird.
Moderne C++ verwendet Objekt als Wert kopieren oder verschieben Semantik und neigt dazu, Polymorphismus zur Kompilierungszeit mit Vorlagen und generische Algorithmen und Typ Merkmale zu adressieren.
Die zwei Dinge sind nicht eins gegeneinander, aber C++ ist absichtlich das Verschmelzen von beiden, daher reduziert die Definition von "Objekt" die traditionelle OOP (Instanz einer Klasse, auf die verwiesen wird), ist -in Tatsache, die Hälfte der C++ - Funktionen und Möglichkeiten wegzuschneiden.
Über Lambda-Ausdrücke, es strengen Sinne sind sie Ausdrücke (nicht Objekte selbst) Rückkehr anonyme typisierten Objekte. So
sagen, sie sind Objekte ungeeignet ist: a+b
es ist nicht selbst ein Objekt: es erzeugt ein Objekt (das Ergebnis des Ausdrucks).Das gleiche gilt für [](){}
: es ist nicht selbst ein Objekt: es ein Objekt erzeugt, können Sie sogar speichern, wie in
auto fn = [](){}; //create a lambda and assign to fn.
fn(); //just calls it
Der fn Typ ist so etwas wie
class lambda_uniquename
{
public:
void operator()()
{}
};
Das Objekt, hier, ist nicht die lambda
Klasse, sondern die fn
Variable.
'int x;' ist 'x' eine Instanz einer Klasse? – Pubby
@Pubby aber meine Frage ist: Was ist ein Objekt? Welche Art von Definition existiert für dieses Wort in der Programmierwelt und was sind die Konsequenzen in den C++ - Definitionen? Für was ich weiß int ist ein Typ von std :: int, also ist es eine Klasse, also x in diesem Fall ist es eine Bezeichnung für ein Objekt, aber ich habe noch nicht definiert, was ein Objekt wirklich ist. – user2269624
Es gibt keine Klasse wie 'std :: int'. –