Domanda

Sono da un background di Java e sta imparando C ++. Ho incontrato il seguente codice C ++:

String source = String::New("'Hello' + ', World'"); 

Come quello che ho capito finora, questo dovrebbe essere una chiamata alla funzione di membro static 'Nuovo' di classe 'String'. Ma, ho cercato attraverso l'intero file di intestazione che definisce 'String', non c'è alcun membro statico denominato 'Nuovo' nella classe String o le sue classi di super. C'è qualche significato speciale allegato alla classe String o la funzione nuovo membro in C ++?

È stato utile?

Soluzione

Hai ragione. Che chiama il metodo static New sulla classe String.

C ++ (o STL) non ha una classe String nativo, c'è è una classe string, ma non dispone di un metodo di ::New. Dovrete fare in modo che stai leggendo la documentazione a destra:)

E 'possibile che sia ereditato da una classe base, quindi assicuratevi di controllare se String fa parte di una gerarchia di ereditarietà.

Ecco il punto con la stringa di v8. E 'interessante.

Ci sono due implementazioni:

Navigando in interno codice sorgente String , String è davvero un oggetto mucchio allocato che rappresenta una stringa JavaScript.

Si scopre che interfaccia utente di Google Code è rotto (forse hanno un numero massimo di caratteri?). Il v8 :: :: interno HeapObject codice sorgente dovrebbe essere in src/objects.h, ma il file viene troncato. E la visibile esternamente v8 :: String codice sorgente dovrebbe essere in include/v8.h, ma troppo è troncato.

È possibile scaricare il sorgente e visualizzare i file. Qui è quello che dice:

/**
 * 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);

  ...
};

Altri suggerimenti

La vostra interpretazione è corretta, si tratta di una chiamata a un metodo statico chiamato New della classe String.

Tuttavia, quella classe String non è la classe std::string standard, in quanto, come si può facilmente vedere, si differenzia nella capitalizzazione. Probabilmente si tratta di una classe String fornito da qualche altra libreria, ma senza conoscere il contesto è difficile dire altro a riguardo.


Addendum

btw, è il motore JavaScript V8 di Google

Ok, ho scoperto; che stringa che si sta utilizzando è il C ++ rappresentazione di una stringa JavaScript, che viene accuratamente utilizzato nel motore V8. Potete trovare il suo codice sorgente qui ; Non riuscivo a trovare alcuna documentazione su di esso, ma è ben commentato.

A proposito, se sono solo avvicinando C ++ si consiglia di iniziare con qualcosa di più semplice, forse senza librerie esterne, in modo da poter ottenere la presa sulla libreria C ++ standard.

--- EDIT ---

Ok, qualcun altro ha trovato prima di me. :)

Il std::string classe (nota minuscolo) è una classe nella libreria standard C ++, definita nel file di intestazione <string>. In C ++ new (nota minuscolo) è un operatore che alloca memoria. La prima cosa che dovete essere circa chiaro è -? Quale classe stringa stai chiedendo di

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top