Строка :: Новая: что это?
-
28-09-2019 - |
Вопрос
Я из фона Java и изучает C ++. Я столкнулся с следующим C ++:
String source = String::New("'Hello' + ', World'");
Как то, что я так понимаю, это должен быть призыв к статическому элементу функции «нового» класса «строки». Но я искал весь файл заголовка, определяющий «String», нет никакого статического элемента с именем «New» в строковом классе или его суперклассных классах. Есть ли какое-либо особое значение, прикрепленное к классу String или новую функцию участника в C ++?
Решение
Ты прав. Это называет static
метод New
на String
сорт.
C ++ (или STL) не имеет родного String
класс, там является а. string
класс, но у него нет ::New
метод. Вы должны убедиться, что вы читаете правильную документацию :)
Возможно, что он унаследован от базового класса, поэтому убедитесь, что вы проверяете, String
является частью иерархии наследования.
Вот сделка с строкой V8. Это интересно.
Есть две реализации:
- v8 :: string. - видимый внешне (вот Doxygen Документация показывая классовую иерархию).
- V8 :: Internal :: string - внутреннее представление.
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 вы спрашиваете о?