文字列::新しい:それは何ですか?
-
28-09-2019 - |
質問
私はJavaの背景出身で、C ++を学んでいます。次のC ++コードに遭遇しました。
String source = String::New("'Hello' + ', World'");
私がこれまでに理解していることとして、これはクラス「文字列」の静的メンバー関数「新しい」への呼びかけであるべきです。しかし、「文字列」を定義するヘッダーファイル全体を検索しましたが、文字列クラスまたはそのスーパークラスに「new」という名前の静的メンバーはありません。文字列クラスまたはC ++の新しいメンバー関数に添付された特別な意味はありますか?
解決
あなたは正しいです。それは呼び出しています static
方法 New
に String
クラス。
C ++(またはSTL)にはネイティブがありません String
クラス、そこ は a string
クラス、しかしそれはありません ::New
方法。正しいドキュメントを読んでいることを確認する必要があります:)
基本クラスから継承されている可能性があるので、必ず確認してください String
継承階層の一部です。
これがV8の文字列との取引です。それは面白い。
2つの実装があります。
- v8 ::文字列 - 外部から表示されるもの(こちらです ドキシゲンドキュメント クラスの階層を表示)。
- V8 ::内部::文字列 - 内部表現。
閲覧 内部文字列ソースコード, String
実際、JavaScript文字列を表すヒープ割り当てられたオブジェクトです。
Google CodeのUIが壊れていることがわかります(最大の文字カウントがあるかもしれませんか?)。 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);
...
};
他のヒント
あなたの解釈は正しいです、それは呼ばれる静的な方法への呼びかけです New
の String
クラス。
しかし、それ String
クラスは標準ではありません std::string
クラスは、簡単に見ることができるように、大文字が異なるためです。おそらくそれはです String
他のライブラリによって提供されるクラスですが、コンテキストを知らずに他のことを言うのは難しいです。
補遺
ところで、それはGoogleが提供するV8 JavaScriptエンジンです
わかりました、私は知りました。使用している文字列は、V8エンジンで使用されているJavaScript文字列のC ++表現です。ソースコードを見つけることができます ここ;私はそれについてのドキュメントを見つけることができませんでしたが、それはよくコメントされています。
ちなみに、C ++に近づいている場合は、外部ライブラリがない場合は、よりシンプルなものから始めて、C ++標準ライブラリを把握できます。
- -編集 - -
OK、他の誰かが私の前でそれを見つけました。 :)
クラス std::string
(注Lowsase)は、ヘッダーファイルで定義されているC ++標準ライブラリのクラスです <string>
. 。 C ++で new
(注小文字に注意)は、メモリを割り当てるオペレーターです。最初に明確にする必要があるのは、どの文字列クラスについて質問していますか?