cari

Rumah  >  Soal Jawab  >  teks badan

c++ - Mengapa kelas boleh diikuti oleh 2 nama kelas?

Saya tidak faham sintaks kelas VALUE_OBJ_CLASS_SPEC, kenapa kelas boleh diikuti dengan 2 nama kelas?

class CMBitMapRO VALUE_OBJ_CLASS_SPEC {
 protected:
  HeapWord* _bmStartWord;      // base address of range covered by map
  size_t    _bmWordSize;       // map size (in #HeapWords covered)
  const int _shifter;          // map to char or bit
  BitMap    _bm;               // the bit map itself

 public:
  // constructor
  CMBitMapRO(int shifter);

  enum { do_yield = true };

  // inquiries
  HeapWord* startWord()   const { return _bmStartWord; }
  size_t    sizeInWords() const { return _bmWordSize;  }
  // the following is one past the last word in space
  HeapWord* endWord()     const { return _bmStartWord + _bmWordSize; }

  // read marks

  bool isMarked(HeapWord* addr) const {
    assert(_bmStartWord <= addr && addr < (_bmStartWord + _bmWordSize),
           "outside underlying space?");
    return _bm.at(heapWordToOffset(addr));
  }

  // iteration
  inline bool iterate(BitMapClosure* cl, MemRegion mr);
  inline bool iterate(BitMapClosure* cl);

  // Return the address corresponding to the next marked bit at or after
  // "addr", and before "limit", if "limit" is non-NULL.  If there is no
  // such bit, returns "limit" if that is non-NULL, or else "endWord()".
  HeapWord* getNextMarkedWordAddress(const HeapWord* addr,
                                     const HeapWord* limit = NULL) const;
  // Return the address corresponding to the next unmarked bit at or after
  // "addr", and before "limit", if "limit" is non-NULL.  If there is no
  // such bit, returns "limit" if that is non-NULL, or else "endWord()".
  HeapWord* getNextUnmarkedWordAddress(const HeapWord* addr,
                                       const HeapWord* limit = NULL) const;

  // conversion utilities
  HeapWord* offsetToHeapWord(size_t offset) const {
    return _bmStartWord + (offset << _shifter);
  }
  size_t heapWordToOffset(const HeapWord* addr) const {
    return pointer_delta(addr, _bmStartWord) >> _shifter;
  }
  int heapWordDiffToOffsetDiff(size_t diff) const;

  // The argument addr should be the start address of a valid object
  HeapWord* nextObject(HeapWord* addr) {
    oop obj = (oop) addr;
    HeapWord* res =  addr + obj->size();
    assert(offsetToHeapWord(heapWordToOffset(res)) == res, "sanity");
    return res;
  }

  void print_on_error(outputStream* st, const char* prefix) const;

  // debugging
  NOT_PRODUCT(bool covers(MemRegion rs) const;)
};

Kod datang daripada jdk8

PHP中文网PHP中文网2731 hari yang lalu1148

membalas semua(2)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-06-05 11:12:52

    VALUE_OBJ_CLASS_SPEC ialah makro, ditakrifkan dalam globalDefinitions_sparcWorks.hppVALUE_OBJ_CLASS_SPEC是一个宏,定义在globalDefinitions_sparcWorks.hpp里

    #define VALUE_OBJ_CLASS_SPEC : public _ValueObj

    #define VALUE_OBJ_CLASS_SPEC : awam _ValueObj

    ref1, ref2🎜

    balas
    0
  • 黄舟

    黄舟2017-06-05 11:12:52

    VALUE_OBJ_CLASS_SPEC bukanlah nama yang letih, fungsinya adalah untuk "menggambarkan" kategori definisi kelas ini

    balas
    0
  • Batalbalas