Строка :: Новая: что это? -- c++ поле с участием string поле с участием v8 поле с участием javascript-engine пол Связанный проблема

String::New: what is it?


4
vote

проблема

русский

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

 <код> String source = String::New("'Hello' + ', World'");    

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

Английский оригинал

I am from a Java background and is learning C++. I encountered the following C++ code:

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

As what I understand so far, this should be a call to static member function 'New' of class 'String'. But, I've searched through the whole header file defining 'String', there is not any static member named 'New' in the String class or its super classes. Is there any special meaning attached to String class or the New member function in C++?

</div
           
 
 

Список ответов

17
 
vote
vote
Лучший ответ
 

Вы правы. Который вызывает <код> static метода <код> New на <код> String класс.

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

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

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

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

    .
  • v8 :: string - внешне видимый (вот Документация Doxygen , показывающая иерархию классов).
  • V8 :: Inter :: string - внутреннее представление. < / li>

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

Оказывается, что UI Google Code сломан (может быть, у них есть максимальный счетчик символов?). V8 :: Внутренний :: исходный код HeapObject должен быть в <Код> gridlayout1 , но файл усечен. И внешне видимый v8 :: Строковый исходный код должен быть в <Код> gridlayout2 , но он тоже усечен.

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

 <код> gridlayout3  
 

You are correct. That is calling the static method New on the String class.

C++ (or STL) doesn't have a native String class, there is a string class, but it doesn't have a ::New method. You'll have to make sure you're reading the right documentation :)

It's possible that it's inherited from a base-class, so make sure you check if String is part of an inheritance hierarchy.

Here's the deal with v8's String. It's interesting.

There are two implementations:

  • v8::String - the externally visible one (Here is doxygen documentation showing the class hierarchy).
  • v8::internal::String - the internal representation.

Browsing the internal String source code, String is indeed a heap allocated object representing a Javascript string.

It turns out that Google Code's UI is broken (maybe they have a maximum character count?). The v8::internal::HeapObject source code should be in src/objects.h, but the file is truncated. And the externally visible v8::String source code should be in include/v8.h, but it too is truncated.

You can download the source and view the files. Here is what it says:

/**  * 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);    ... }; 
</div
 
 
 
 
5
 
vote

Ваша интерпретация правильная, это вызов статическим методом под названием <код> New <код> String

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


добавление

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

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

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

--- Редактировать ---

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

 

Your interpretation is correct, it is a call to a static method called New of the String class.

However, that String class isn't the standard std::string class, since, as you can easily see, it differs in capitalization. Probably it's a String class provided by some other library, but without knowing the context is hard to say anything else about it.


Addendum

btw, it is the v8 Javascript engine provided by google

Ok, I found out; that String that you are using is the C++ representation of a JavaScript string, that is throughly used in the V8 engine. You can find its source code here; I couldn't find any documentation about it, but it's well commented.

By the way, if you are just approaching C++ you may want to start with something simpler, maybe without external libraries, so you can get the grasp on the C++ standard library.

---EDIT---

Ok, someone else found it before me. :)

</div
 
 
1
 
vote

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

 

The class std::string (note lowercase) is a class in the C++ standard library, defined in the header file <string>. In C++ new (note lowercase) is an operator that allocates memory. The first thing you need to be clear about is - which string class are you asking about?

</div
 
 

Связанный проблема

29  C ++ Указатель на объекты  ( C pointer to objects ) 
в C ++ У вас всегда инициализировать указатель на объект с new ключевое слово? или вы просто имеете это тоже: <код> MyClass *myclass; myclass->DoSometh...

6  Singleton & Multi-Threading  ( Singleton multi threading ) 
У меня есть следующий класс <код> class Singleton { private: static Singleton *p_inst; Singleton(); public: static Singleton * instance()...

29  Добавление! Оператор и SQRT (), POW () и т. Д. Для пример примерка калькулятора  ( Adding the operator and sqrt pow etc to a calculator example applicatio ) 
Я делаю упражнения в новой книге Strustrup "Принципы программирования и практики с использованием C ++" и было интересно, если кто-нибудь на переполнении ст...

2  Создание хеша для данных больше, чем память (без зарядки)  ( Generating a hash for data larger than memory without getting arrested ) 
Добрый послеобеденный переполнец! ;) Что я хочу сделать: Я заинтересован в проверке передаваемой целостности файлов. Как я подошел к нему: Я рассм...

14  Классы, Rvalues ​​и Rvalue Список  ( Classes rvalues and rvalue references ) 
Lvalue - это значение, связанное с окончательной областью памяти, тогда как rvalue - это значение выражения, существование которого является временным, а не о...

0  Как захватывать события, выпущенные из нового окна всплывающего  ( How to capture events fired from new popup ie window ) 
Приветствия! <Сильная> Ситуация: My ActiveX DLL содержит индивидуальный webbrowser. WebBrowser отображает веб-страницу. Когда пользователь нажимает на сс...

-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто]  ( Loop that compiles and runs in int main function wont compile when put into a se ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыто. Этот вопрос нуждается в Детали отладки . В настоящее вр...

-1  Приложение C ++ в массивах с использованием арифметического указателя  ( C app on arrays using pointer arithmetic ) 
Вопрос: как я могу генерировать случайное животное из массива, используя эту функцию? <код> const int MAX =12; //12 animals const int MAXSTR = 10; ...

3  Преобразование IPlimage в вектор в 1D в OpenCV  ( Converting iplimage into 1d vector in opencv ) 
Я хочу преобразовать MXN IPLIMAGE в вектору A (M * N) x 1 1. Может ли это сделать с любой функцией в OpenCV? Любая помощь значительно ценится. ...

1  Проблема с использованием TextureView с NDK  ( Issue using textureview with ndk ) 
Я работаю над небольшим кусочком кода, используя текстуру, чтобы отобразить результат среды MediaPlayer. Я сталкиваюсь с проблемой, пытающимся смешивать упр...

-1  C ++ DO В то время как проблемы с петлей [закрыто]  ( C do while loop issues ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

3  Отправка HTTP Post Запрос на обновление содержимого файла с использованием C ++ REST SDK Casablanca  ( Sending a http post request for updating file contents using c rest sdk casabl ) 
Я пытаюсь обновить содержимое файла на сервере Alfresco, используя C ++ SDK SDK. Я использую URL Alfresco CMIS URL для отправки запроса. Быть более конкретным...

1  Наличие проблемных проектов C ++ в Eclipse CDT в ОС X для глупой причины  ( Having trouble building c project in eclipse cdt in os x for a silly reason ) 
Я пытаюсь построить очень простую программу C ++ в Eclipse, и я получаю очень глупую ошибку: <код> **** Internal Builder is used for build **...

3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии?  ( How to create closed areas convex polygons from set of line segments ) 
Следующая проблема находится в 2D, поэтому некоторые упрощения могут быть сделаны при предложении ответов. Мне нужно создать закрытые области (определены ли...

1  Как работают Char и INT в C ++  ( How do char and int work in c ) 
Может быть, я собираюсь задать глупый вопрос, но я хочу подтвердить, как работает Char? Позвольте мне объяснить с примерами того, что я хочу спросить. Пусть п...

Связанный проблема

29  C ++ Указатель на объекты 
6  Singleton & Multi-Threading 
29  Добавление! Оператор и SQRT (), POW () и т. Д. Для пример примерка калькулятора 
2  Создание хеша для данных больше, чем память (без зарядки) 
14  Классы, Rvalues ​​и Rvalue Список 
0  Как захватывать события, выпущенные из нового окна всплывающего 
-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто] 
-1  Приложение C ++ в массивах с использованием арифметического указателя 
3  Преобразование IPlimage в вектор в 1D в OpenCV 
1  Проблема с использованием TextureView с NDK 
-1  C ++ DO В то время как проблемы с петлей [закрыто] 
3  Отправка HTTP Post Запрос на обновление содержимого файла с использованием C ++ REST SDK Casablanca 
1  Наличие проблемных проектов C ++ в Eclipse CDT в ОС X для глупой причины 
3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии? 
1  Как работают Char и INT в C ++