Pregunta

Soy de un fondo de Java y está aprendiendo C ++. Me encontré con el siguiente código de C ++:

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

Como lo entiendo hasta ahora, esto debería ser una llamada a la función miembro estática 'Nuevo' de la clase 'Cadena'. Sin embargo, he buscado a través de todo el archivo de cabecera que define 'Cadena', no hay ningún miembro estático llamado 'Nuevo' en la clase String o sus súper clases. ¿Hay algún significado especial que se atribuye a la clase String o la función de miembro nuevo en C ++?

¿Fue útil?

Solución

Usted está correcto. Que está llamando el método static New en la clase String.

C ++ (o STL) no tiene una clase String nativa, hay es una clase string, pero no tiene un método ::New. Tendrá que asegurarse de que está leyendo la documentación correcta:)

Es posible que se hereda de una clase base, por lo que asegúrese de comprobar si String es parte de una jerarquía de herencia.

Este es el trato con la cadena de V8. Es interesante.

Existen dos implementaciones:

Navegar por interna código fuente cadena , String es de hecho un objeto montón asignado representa una cadena Javascript.

Resulta que la interfaz de usuario de Google Code está roto (tal vez tienen un número máximo de caracteres?). La v8 :: :: código fuente interna HeapObject debe estar en src/objects.h, pero el archivo se trunca. Y el visible externamente v8 :: cadena de código fuente debe estar en include/v8.h, pero también se trunca.

Se puede descargar el código fuente y ver los archivos. Aquí es lo que 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);

  ...
};

Otros consejos

Su interpretación es correcta, se trata de una llamada a un método estático llamado New de la clase String.

Sin embargo, esa clase String no es la clase std::string estándar, ya que, como se puede ver fácilmente, se diferencia de la capitalización. Probablemente se trata de una clase String proporcionada por alguna otra biblioteca, pero sin conocer el contexto es difícil decir algo más al respecto.


Addendum

por cierto, es el motor Javascript V8 proporcionada por Google

Bueno, he encontrado a cabo; Esa cadena que está utilizando es la representación de C ++ de una cadena de JavaScript, que se utiliza a fondo en el motor V8. Puede encontrar su código fuente aquí ; No pude encontrar ninguna documentación al respecto, pero está bien comentado.

Por cierto, si usted está acercando a C ++ es posible que desee comenzar con algo más simple, tal vez sin librerías externas, para que pueda obtener la comprensión de la biblioteca C ++ estándar.

--- --- EDITAR

Ok, otra persona lo encontró antes que yo. :)

El std::string clase (nota minúscula) es una clase en la biblioteca estándar de C ++, que se define en el <string> archivo de cabecera. En C ++ new (nota minúscula) es un operador que Asigna memoria. La primera cosa que hay que estar a punto claro es - ¿qué clase string estás preguntando por

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top