我来自Java背景,正在学习C ++。我遇到了以下C ++代码:
String source = String::New("'Hello' + ', World'");
据我所知,到目前为止,这应该是对类'String'的静态成员函数'New'的调用。但是,我搜索了定义'String'的整个头文件,在String类或其超类中没有任何名为'New'的静态成员。 String类或C ++中的New成员函数是否附加了特殊含义?
答案 0 :(得分:17)
你是对的。这是在static
类上调用New
方法String
。
C ++(或STL)没有本地String
类, 是string
类,但它没有::New
类方法。你必须确保你正在阅读正确的文档:)
它可能是从基类继承的,因此请确保检查String
是否是继承层次结构的一部分。
这是与v8的String的交易。这很有趣。
有两种实现方式:
浏览internal String source code,String
确实是一个表示Javascript字符串的堆分配对象。
事实证明,Google Code的用户界面已被破坏(也许他们的字符数最多?)。 v8::internal::HeapObject source code应位于src/objects.h
中,但文件会被截断。外部可见的v8::String source code应该在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);
...
};
答案 1 :(得分:5)
您的解释是正确的,它是对New
类String
的静态方法的调用。
但是,String
类不是标准std::string
类,因为您可以很容易地看到,它的大小写不同。可能它是由其他一些库提供的String
类,但不知道上下文很难说出任何其他内容。
顺便说一句,它是谷歌提供的v8 Javascript引擎
好的,我发现了;您正在使用的String是JavaScript字符串的C ++表示形式,它通常在V8引擎中使用。你可以找到它的源代码here;我找不到任何关于它的文档,但是评论很好。
顺便说一句,如果你只是接近C ++,你可能想要从更简单的东西开始,也许没有外部库,这样你就可以掌握C ++标准库。
--- --- EDIT
好的,其他人在我面前找到了它。 :)
答案 2 :(得分:1)
类std::string
(注释小写)是C ++标准库中的一个类,在头文件<string>
中定义。在C ++ new
(注意小写)是一个分配内存的运算符。你需要清楚的第一件事是 - 你要问哪个字符串类?