位於 llvm/include/llvm/[[ADT]]/[[SmallString.h]]html
參見:http://llvm.org/docs/ProgrammersManual.html#dss_smallstring安全
註釋:'Normally small' strings -- 普通的小的字符串app
這個頭文件定義了類 SmallString。函數
SmallString 是 [[SmallVector]] 的子類,添加了一個方便的 API 來對字符串進行操做,如使用 [[StringRef]] 參數的 += 重載。SmallString 儘可能使用預先分配的空間來存放字符串數據,這樣避免了沒必要要的內存分配,在須要的時候才從堆中分配內存。由於 SmallString 本身擁有字符串數據,所以能夠安全地使用它進行各類操做和變化。this
相似於 [[SmallVector]], SmallString 的大的缺陷是它的 sizeof()。通常放在堆棧(stack)中比較好,極少放在堆(heap)中,也極少用做某個堆中分配的對象的成員或當作返回值。code
== 類 SmallString 概要 ==orm
template<unsigned InternalLen> class SmallString : public SmallVector<char, InternalLen> { // 使用 SmallVector 作底層存儲 // 從 SmallVector, SmallVectorBase 等基類得到數據成員。參見 SmallVector char *BeginX, *EndX, *CapacityX; char in_place_buffer[InternalLen]; // 在類中的字符串緩衝,用於說明,實際是 union U 類型的,大小也不是。 // SmallString 本身的。 this() // 多種形式的構造 assign(), append(), compare(), startswith(), endswith(), find() substr(), slice(), +=() 等衆多的字符串操做函數。 }
這個類多處使用 [[StringRef]] 作爲參數或返回值。
htm