Question

Je suis d'un milieu Java et C ++ est l'apprentissage. Je rencontrais le code suivant ++ C:

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

ce que je comprends à ce jour, cela devrait être un appel à la fonction membre statique « Nouveau » de la classe « String ». Mais, je l'ai cherché dans tout le fichier d'en-tête définissant « String », il n'y a pas un membre de statique nommé « Nouveau » dans la classe chaîne ou ses super-classes. Y at-il une signification particulière attachée à la classe String ou la fonction Nouveau membre en C ++?

Était-ce utile?

La solution

Vous avez raison. Qui appelle la méthode static New sur la classe String.

C ++ (ou STL) ne dispose pas d'une classe String native, il une classe string, mais il ne dispose pas d'une méthode de ::New. Vous devez vous assurer que vous lisez la documentation droite:)

Il est possible qu'il a hérité d'une classe de base, alors assurez-vous de vérifier si String fait partie d'une hiérarchie d'héritage.

Voici l'affaire avec la chaîne de v8. Il est intéressant.

Il y a deux implémentations:

Naviguer sur le Code source interne string , String est en effet un objet alloué tas représentant une chaîne Javascript.

Il se trouve que l'interface utilisateur de Google Code est cassé (peut-être qu'ils ont un nombre de caractères maximum?). v8 :: code source interne :: HeapObject devrait être src/objects.h, mais le fichier est tronqué. Et le visible de l'extérieur v8 :: chaîne code source doit être include/v8.h, mais aussi est tronquée.

Vous pouvez télécharger la source et afficher les fichiers. Voici ce qu'il dit:

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

  ...
};

Autres conseils

Votre interprétation est correcte, il est un appel à une méthode statique appelée New de la classe String.

Cependant, cette classe de String n'est pas la classe standard std::string, puisque, comme vous pouvez facilement voir, elle diffère de la capitalisation. C'est probablement une classe de String fourni par une autre bibliothèque, mais sans connaître le contexte est difficile de dire quoi que ce soit d'autre à ce sujet.


Addendum

BTW, il est le moteur v8 Javascript fourni par Google

Ok, j'ai découvert; cette chaîne que vous utilisez est la représentation C d'une chaîne de JavaScript, qui est throughly utilisé dans le moteur V8. Vous pouvez trouver son code source ici ; Je ne pouvais pas trouver toute la documentation à ce sujet, mais il est bien commenté.

Par ailleurs, si vous approchais C ++, vous voudrez peut-être commencer par quelque chose de simple, peut-être sans bibliothèques externes, de sorte que vous pouvez obtenir la prise sur la bibliothèque standard C ++.

--- EDIT ---

Ok, quelqu'un a trouvé autre devant moi. :)

La std::string de classe (note minuscule) est une classe dans la bibliothèque standard C de, définie dans le fichier d'en-tête <string>. En C ++ new (note minuscule) est un opérateur qui alloue de la mémoire. La première chose que vous devez être clair au sujet - quelle classe de chaîne demandez-vous au sujet

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top