String :: Nuovo: che cos'è?
-
28-09-2019 - |
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 ++?
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:
- v8 :: String - quella esternamente visibile (Qui è documentazione Doxygen mostra la gerarchia di classi).
- v8 :: :: String interna -. la rappresentazione interna
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