String :: Neu: was ist es?
-
28-09-2019 - |
Frage
Ich bin von einem Java-Hintergrund und lerne C ++. Ich traf den folgenden C ++ Code:
String source = String::New("'Hello' + ', World'");
Als das, was ich bisher verstehen, soll dies ein Aufruf an statischer Member-Funktion ‚Neu‘ der Klasse ‚String‘ sein. Aber ich durch die ganze Header-Datei gesucht habe definieren ‚String‘, ist es kein statisches Element namens ‚Neu‘ in der String-Klasse oder ihre Superklassen. Gibt es eine besondere Bedeutung an String-Klasse oder die neuen Member-Funktion in C ++?
Lösung
Sie sind richtig. Das ist die static
Methode New
auf der String
-Klasse aufrufen.
C ++ (oder STL) keine nativen String
Klasse hat, gibt ist eine string
Klasse, aber es ist kein ::New
Verfahren hat. Sie werden sicher sind, machen Sie die richtige Dokumentation zu lesen:)
Es ist möglich, dass es von einer Basisklasse geerbt hat, so stellen Sie sicher, dass Sie überprüfen, ob String
Teil einer Vererbungshierarchie ist.
Hier ist der Deal mit v8 String. Es ist interessant.
Es gibt zwei Ausführungen:
- v8 :: String - die von außen sichtbar eine (hier doxygen Dokumentation die Klassenhierarchie angezeigt).
- v8 :: internal :: String -. die interne Darstellung
Browsing the interner String-Quellcode , String
ist in der Tat ein Heap zugewiesen Objekt repräsentiert einen Javascript-String.
Es stellt sich heraus, dass Google Code UI unterbrochen ist (vielleicht haben sie eine maximale Zeichenzahl?). Die v8 :: internal :: HeapObject Quellcode in src/objects.h
sein sollte, aber die Datei abgeschnitten wird. Und das von außen sichtbar v8 :: String Quellcode in include/v8.h
sein sollte, aber es ist auch abgeschnitten.
Sie können den Quellcode herunterladen und sehen Sie die Dateien. Hier ist, was es sagt:
/**
* A JavaScript string value (ECMA-262, 4.3.17).
*/
class V8EXPORT String : public Primitive {
public:
...
/**
* Allocates a new string from either utf-8 encoded or ascii data.
* The second parameter 'length' gives the buffer length.
* If the data is utf-8 encoded, the caller must
* be careful to supply the length parameter.
* If it is not given, the function calls
* 'strlen' to determine the buffer length, it might be
* wrong if 'data' contains a null character.
*/
static Local<String> New(const char* data, int length = -1);
/** Allocates a new string from utf16 data.*/
static Local<String> New(const uint16_t* data, int length = -1);
...
};
Andere Tipps
Ihre Interpretation ist richtig, es ist ein Aufruf einer statischen Methode ist New
der String
Klasse genannt.
Sie jedoch, dass String
Klasse ist nicht die Standard-std::string
Klasse, da, wie man unschwer erkennen kann, ist es in Großschreibung unterscheidet. Wahrscheinlich ist es eine String
Klasse durch eine andere Bibliothek zur Verfügung gestellt, aber ohne den Kontext zu kennen, ist schwer, etwas zu sagen, sonst über sie.
Nachtrag
btw, es ist die v8 Javascript-Engine von Google
Ok, fand ich heraus; dass String, dass Sie die C ++ ist Darstellung eines JavaScript-String verwenden, die throughly in dem V8-Motor verwendet wird. Sie können den Quellcode hier ; Ich konnte keine Dokumentation darüber finden, aber es ist gut kommentiert.
By the way, wenn Sie nur C ++ nähern Sie möchten vielleicht mit etwas einfacher, vielleicht ohne externe Bibliotheken starten, so dass Sie den Griff auf dem C ++ Standard-Bibliothek erhalten.
--- EDIT ---
Ok, jemand gefunden sonst es vor mir. :)
Die Klasse std::string
(Anmerkung klein geschrieben) ist eine Klasse, in der Standardbibliothek C ++, in der Header-Datei <string>
definiert. In C ++ new
(Anmerkung klein geschrieben) ist ein Operator, dass zuordnet Speicher. Das erste, was Sie brauchen, klar zu sein - die String-Klasse werden über Sie fragen