4

私は Java のバックグラウンドを持ち、C++ を学んでいます。次の C++ コードに遭遇しました。

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

私がこれまでに理解しているように、これはクラス「String」の静的メンバー関数「New」への呼び出しである必要があります。しかし、「String」を定義するヘッダー ファイル全体を検索しましたが、String クラスまたはそのスーパー クラスに「New」という名前の静的メンバーはありません。String クラスや C++ の New メンバー関数に特別な意味はありますか?

4

3 に答える 3

17

あなたは正しいです。それはクラスのstaticメソッドNewを呼び出すことです。String

C ++(またはSTL)にはネイティブクラスStringがなく、クラスはありますが、メソッドはありません。正しいドキュメントを読んでいることを確認する必要があります:)string::New

String基本クラスから継承されている可能性があるため、が継承階層の一部であるかどうかを確認してください。

これがv8の文字列の扱いです。それは面白い。

2つの実装があります。

内部文字列ソースコードString参照は、実際にはJavascript文字列を表すヒープ割り当てオブジェクトです。

Google CodeのUIが壊れていることがわかりました(おそらく最大文字数がありますか?)。v8 :: internal :: 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);

  ...
};
于 2010-06-18T11:32:47.043 に答える
5

Newあなたの解釈は正しいです、それはStringクラスの呼び出された静的メソッドへの呼び出しです。

ただし、簡単にわかるように、大文字と小文字が異なるため、そのStringクラスは標準クラスではありません。std::stringおそらくそれはString他のライブラリによって提供されるクラスですが、コンテキストを知らなければ、それについて他に何も言うのは難しいです。


補遺

ところで、それはグーグルによって提供されるv8Javascriptエンジンです

わかりました、わかりました。使用している文字列は、JavaScript文字列のC ++表現であり、V8エンジンで完全に使用されています。そのソースコードはここにあります; それに関するドキュメントは見つかりませんでしたが、よくコメントされています。

ちなみに、C ++に近づいている場合は、外部ライブラリを使用せずに、より単純なものから始めて、C++標準ライブラリを把握することをお勧めします。

- -編集 - -

わかりました、他の誰かが私の前にそれを見つけました。:)

于 2010-06-18T11:33:01.583 に答える
1

クラスstd::string(小文字に注意)は、ヘッダーファイルで定義されているC++標準ライブラリのクラスです<string>。C ++ではnew (小文字に注意)はメモリを割り当てる演算子です。最初に明確にする必要があるのは、どの文字列クラスについて質問しているのかということです。

于 2010-06-18T11:33:51.557 に答える