对于FBString,max_size()只返回std::numeric_limits<size_type>::max()。但是, struct MediumLarge中的capacity_的高两位用于表示 FBString 的类型(small/medium/large),这意味着 capacity_ 的最大值将为 2^62-1(64 位处理器),小于size_t的最大值。我误解了实现还是这实际上是一个错误?
struct MediumLarge {
Char* data_;
size_t size_;
size_t capacity_;
size_t capacity() const {
return kIsLittleEndian ? capacity_ & capacityExtractMask : capacity_ >> 2;
}
void setCapacity(size_t cap, Category cat) {
capacity_ = kIsLittleEndian
? cap | (static_cast<size_t>(cat) << kCategoryShift)
: (cap << 2) | static_cast<size_t>(cat);
}
};