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 ++?

War es hilfreich?

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:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top