对于FBString,max_size()只是返回std::numeric_limits
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);
}
};
由于folly::FBString
的文档声明为:
100%兼容
std::string
它实际上似乎是一个错误(在我看来)。
BTW,对于大的字符串,FBString
应用写时复制(COW),这也破坏了与std::string
的兼容性(从c++ 11开始)。
参见c++ 11中COW std::string实现的合法性。
我猜他们只是不关心那些不切实际的长度的字符串(现在)。由于COW导致的不兼容性可能会更严重。