c++ - 为什么class后面可以跟2个类名?

【字号: 日期:2023-03-17浏览:34作者:雯心

问题描述

不理解 class 的语法中 VALUE_OBJ_CLASS_SPEC,为什么class后面可以跟2个类名?

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;)};

代码来自jdk8

问题解答

回答1:

VALUE_OBJ_CLASS_SPEC是一个宏,定义在globalDefinitions_sparcWorks.hpp里

#define VALUE_OBJ_CLASS_SPEC : public _ValueObj

ref1, ref2

回答2:

VALUE_OBJ_CLASS_SPEC 并不是累名,它的作用是 “描述” 这个类的定义类别

相关文章: