字符串::新:这是什么?

时间:2010-06-18 11:29:34

标签: c++ string v8 javascript-engine

我来自Java背景,正在学习C ++。我遇到了以下C ++代码:

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

据我所知,到目前为止,这应该是对类'String'的静态成员函数'New'的调用。但是,我搜索了定义'String'的整个头文件,在String类或其超类中没有任何名为'New'的静态成员。 String类或C ++中的New成员函数是否附加了特殊含义?

3 个答案:

答案 0 :(得分:17)

你是对的。这是在static类上调用New方法String

C ++(或STL)没有本地String类, string类,但它没有::New类方法。你必须确保你正在阅读正确的文档:)

它可能是从基类继承的,因此请确保检查String是否是继承层次结构的一部分。

这是与v8的String的交易。这很有趣。

有两种实现方式:

浏览internal String source codeString确实是一个表示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)

您的解释是正确的,它是对NewString的静态方法的调用。

但是,String类不是标准std::string类,因为您可以很容易地看到,它的大小写不同。可能它是由其他一些库提供的String类,但不知道上下文很难说出任何其他内容。


附录

顺便说一句,它是谷歌提供的v8 Javascript引擎

好的,我发现了;您正在使用的String是JavaScript字符串的C ++表示形式,它通常在V8引擎中使用。你可以找到它的源代码here;我找不到任何关于它的文档,但是评论很好。

顺便说一句,如果你只是接近C ++,你可能想要从更简单的东西开始,也许没有外部库,这样你就可以掌握C ++标准库。

--- --- EDIT

好的,其他人在我面前找到了它。 :)

答案 2 :(得分:1)

std::string(注释小写)是C ++标准库中的一个类,在头文件<string>中定义。在C ++ new(注意小写)是一个分配内存的运算符。你需要清楚的第一件事是 - 你要问哪个字符串类?