字符串:: new:这是什么?
-
28-09-2019 - |
题
我来自Java背景,正在学习C ++。我遇到以下C ++代码:
String source = String::New("'Hello' + ', World'");
迄今为止,我了解到的是,这应该是静态成员函数“新的”字符串'的呼吁。但是,我已经搜索了定义“字符串”的整个标头文件,在字符串类或其超级类中没有任何名为“新”的静态成员。字符串类或C ++中的新成员函数是否附带了任何特殊含义?
解决方案
你是对的。那在打电话 static
方法 New
在 String
班级。
C ++(或STL)没有本地 String
上课,那里 是 一种 string
上课,但没有 ::New
方法。您必须确保您正在阅读正确的文档:)
它可能是从基类继承的,因此请确保检查是否检查 String
是继承层次结构的一部分。
这是与V8字符串的交易。这真有趣。
有两个实现:
- v8 :: string - 外部可见的一个(这里是 doxygen文档 显示类层次结构)。
- v8 ::内部:: string - 内部表示。
浏览 内部字符串源代码, 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);
...
};
其他提示
您的解释是正确的,这是对静态方法的调用 New
的 String
班级。
但是,那是 String
班级不是标准 std::string
班级,因为您可以轻松地看到它的资本化不同。可能是 String
其他一些库提供的课程,但不知道上下文很难说其他任何内容。
附录
顺便说一句,这是Google提供的V8 JavaScript引擎
好的,我发现了;您正在使用的字符串是JavaScript字符串的C ++表示,该字符串在V8引擎中透彻使用。您可以找到其源代码 这里;我找不到任何有关它的文档,但对此有很好的评论。
顺便说一句,如果您只是接近C ++,则可能需要从更简单的东西开始,也许没有外部库,因此您可以在C ++标准库上获得掌握。
- -编辑 - -
好的,其他人在我面前找到了它。 :)
班上 std::string
(注意小写)是C ++标准库中的一类,在标题文件中定义 <string>
. 。在C ++中 new
(注意小写)是分配内存的操作员。您需要清楚的第一件事是 - 您在问哪个字符串类?