Jav*_*Man 4 c++ string v8 javascript-engine
我来自Java背景,正在学习C++.我遇到了以下C++代码:
String source = String::New("'Hello' + ', World'");
Run Code Online (Sandbox Code Playgroud)
正如我到目前为止所理解的,这应该是对类'String'的静态成员函数'New'的调用.但是,我搜索了定义'String'的整个头文件,在String类或其超类中没有任何名为'New'的静态成员.String类或C++中的New成员函数是否附加了特殊含义?
Ste*_*hen 17
你是对的.那就是在类上调用static方法.NewString
C++(或STL)不具有天然String类,有是一string类,但它不具有::New方法.你必须确保你正在阅读正确的文档:)
它可能是从基类继承的,因此请确保检查是否String属于继承层次结构.
这是与v8的String的交易.这真有趣.
有两种实现:
浏览内部String源代码,String确实是表示Javascript字符串的堆分配对象.
事实证明,Google Code的用户界面被破坏了(也许他们的字符数最多?).该V8 ::内部:: HeapObject源代码应该是src/objects.h,但该文件将被截断.外部可见的v8 :: String源代码应该在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);
...
};
Run Code Online (Sandbox Code Playgroud)
您的解释是正确的,它是New对String类的静态方法的调用.
但是,String该类不是标准std::string类,因为您可以很容易地看到它的大小写不同.可能它是String由其他一些图书馆提供的课程,但不知道上下文很难说出任何其他内容.
顺便说一句,这是谷歌提供的v8 Javascript引擎
好的,我发现了; 您正在使用的String是JavaScript字符串的C++表示形式,它通常在V8引擎中使用.你可以在这里找到它的源代码; 我找不到任何关于它的文档,但是评论很好.
顺便说一下,如果你只是接近C++,你可能想要从更简单的东西开始,也许没有外部库,这样你就可以掌握C++标准库.
- -编辑 - -
好的,别人在我面前找到了它.:)