Вопрос

Я из фона Java и изучает C ++. Я столкнулся с следующим C ++:

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

Как то, что я так понимаю, это должен быть призыв к статическому элементу функции «нового» класса «строки». Но я искал весь файл заголовка, определяющий «String», нет никакого статического элемента с именем «New» в строковом классе или его суперклассных классах. Есть ли какое-либо особое значение, прикрепленное к классу String или новую функцию участника в C ++?

Это было полезно?

Решение

Ты прав. Это называет static метод New на String сорт.

C ++ (или STL) не имеет родного String класс, там является а. string класс, но у него нет ::New метод. Вы должны убедиться, что вы читаете правильную документацию :)

Возможно, что он унаследован от базового класса, поэтому убедитесь, что вы проверяете, String является частью иерархии наследования.

Вот сделка с строкой V8. Это интересно.

Есть две реализации:

Browsing the Внутренний строковый исходный код, String действительно является выделенным куча объектом, представляющим строку JavaScript.

Оказывается, что UI Google Code сломан (может быть, у них максимальный счетчик символов?). То V8 :: Внутренний :: исходный код HeapObject должно быть внутри src/objects.h, но файл усечен. И внешне видимый V8 :: Строковый исходный код должно быть внутри include/v8.h, но это тоже урезано.

Вы можете скачать источник и просмотреть файлы. Вот что он говорит:

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

  ...
};

Другие советы

Ваша интерпретация правильная, это призыв к статическому методу New принадлежащий String сорт.

Однако это String класс не стандарт std::string Класс, поскольку, как вы можете легко увидеть, он отличается капитализацией. Вероятно, это String Класс, предоставленный какой-то другой библиотекой, но, не зная, что контекст трудно сказать что-нибудь об этом.


Приложение

BTW, это V8 JavaScript Engine, предоставляемый Google

Хорошо, я узнал; Эта строка, которую вы используете, представляет собой представление C ++ javaScript String, которая используется в двигателе V8. Вы можете найти свой исходный код здесь; Я не мог найти никакой документации об этом, но это хорошо прокомментировано.

Кстати, если вы просто приближаетесь к C ++, вы можете начать с чего-то проще, возможно, без внешних библиотек, поэтому вы можете получить похвал в стандартной библиотеке C ++.

---РЕДАКТИРОВАТЬ---

Хорошо, кто-то еще нашел его до меня. :)

Класс std::string (Note Lowncape) - это класс в стандартной библиотеке C ++, определенной в файле заголовка <string>. Отказ В C ++ new (Note Lowncape) - это оператор, который выделяет память. Первое, о чем вы должны быть понятно, это - какой класс String вы спрашиваете о?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top