سؤال

أنا من خلفية Java وأتعلم C ++. واجهت رمز C ++ التالي:

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

نظرًا لأن ما أفهمه حتى الآن ، يجب أن تكون هذه دعوة لوظيفة الأعضاء الثابتة "سلسلة جديدة" من "سلسلة" الفصل. لكن ، لقد بحثت من خلال ملف الرأس بأكمله الذي يحدد "سلسلة" ، لا يوجد أي عضو ثابت يسمى "New" في فئة السلسلة أو فئاتها الفائقة. هل هناك أي معنى خاص مرتبط بفئة السلسلة أو وظيفة العضو الجديدة في C ++؟

هل كانت مفيدة؟

المحلول

انت على حق. الذي يدعو إلى static طريقة New على ال String صف دراسي.

لا يحتوي C ++ (أو STL) على مواطن String الفصل ، هناك هو أ string الفصل ، ولكن ليس لديه ملف ::New طريقة. يجب عليك التأكد من أنك تقرأ الوثائق الصحيحة :)

من الممكن أن تكون ورثًا من فئة قاعدة ، لذا تأكد من التحقق إذا String هو جزء من التسلسل الهرمي الميراث.

إليكم الصفقة مع سلسلة V8. إنه شيق.

هناك تطبيقان:

تصفح رمز مصدر السلسلة الداخلية, String هو في الواقع كائن مخصص كومة تمثل سلسلة javaScript.

اتضح أن واجهة المستخدم الخاصة بـ Google Code مكسورة (ربما يكون لديهم الحد الأقصى لعدد الأحرف؟). ال V8 :: Internal :: HeapObject Code يجب أن يكون في 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 الفصل الذي توفره بعض المكتبة الأخرى ، ولكن دون معرفة السياق يصعب قول أي شيء آخر عنها.


إضافة

راجع للشغل ، إنه محرك V8 JavaScript الذي توفره Google

حسنًا ، اكتشفت ؛ هذه السلسلة التي تستخدمها هي تمثيل C ++ لسلسلة javaScript ، والتي يتم استخدامها بشكل جيد في محرك V8. يمكنك العثور على رمز المصدر الخاص به هنا; ؛ لم أتمكن من العثور على أي وثائق حول هذا الموضوع ، لكن تم التعليق عليها جيدًا.

بالمناسبة ، إذا كنت تقترب فقط من C ++ ، فقد ترغب في البدء بشيء أبسط ، ربما بدون مكتبات خارجية ، حتى تتمكن من الحصول على فهم المكتبة القياسية C ++.

---تعديل---

حسنًا ، وجدها شخص آخر قبلي. قون

الفصل std::string (ملاحظة صغيرة) هي فئة في المكتبة القياسية C ++ ، محددة في ملف الرأس <string>. في C ++ new (ملاحظة صغيرة) هو مشغل يخصص الذاكرة. أول شيء تحتاج إلى أن تكون واضحًا بشأنه - ما هو فئة السلسلة التي تسأل عنها؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top