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

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

迄今为止,我了解到的是,这应该是静态成员函数“新的”字符串'的呼吁。但是,我已经搜索了定义“字符串”的整个标头文件,在字符串类或其超级类中没有任何名为“新”的静态成员。字符串类或C ++中的新成员函数是否附带了任何特殊含义?

有帮助吗?

解决方案

你是对的。那在打电话 static 方法 NewString 班级。

C ++(或STL)没有本地 String 上课,那里 一种 string 上课,但没有 ::New 方法。您必须确保您正在阅读正确的文档:)

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

这是与V8字符串的交易。这真有趣。

有两个实现:

浏览 内部字符串源代码, String 确实是代表JavaScript字符串的堆分配对象。

事实证明,Google Code的UI被打破(也许它们具有最大的字符计数?)。这 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);

  ...
};

其他提示

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

但是,那是 String 班级不是标准 std::string 班级,因为您可以轻松地看到它的资本化不同。可能是 String 其他一些库提供的课程,但不知道上下文很难说其他任何内容。


附录

顺便说一句,这是Google提供的V8 JavaScript引擎

好的,我发现了;您正在使用的字符串是JavaScript字符串的C ++表示,该字符串在V8引擎中透彻使用。您可以找到其源代码 这里;我找不到任何有关它的文档,但对此有很好的评论。

顺便说一句,如果您只是接近C ++,则可能需要从更简单的东西开始,也许没有外部库,因此您可以在C ++标准库上获得掌握。

- -编辑 - -

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

班上 std::string (注意小写)是C ++标准库中的一类,在标题文件中定义 <string>. 。在C ++中 new (注意小写)是分配内存的操作员。您需要清楚的第一件事是 - 您在问哪个字符串类?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top