C++中StringPiece瞭解

lypbendlf發表於2024-04-28

轉自:https://blog.csdn.net/zxpoiu/article/details/117258047

1.介紹

使用c++ string類不可避免會帶來很多不必要的複製,複製多了必然影響效能。因此在很多高效能C++框架的實現中,都會使用StringPiece類作為string類的wrapper,該類只持有目標字串的指標,而避免額外的複製

class StringPiece {
 private:
  const char *ptr_;// 被定義為const型別,其不允許任何修改
  int length_;

 public:
  // We provide non-explicit singleton constructors so users can pass
  // in a "const char*" or a "string" wherever a "StringPiece" is
  // expected.
  StringPiece() : ptr_(NULL), length_(0) {}
  StringPiece(const char *str)
      : ptr_(str), length_(static_cast<int>(strlen(ptr_))) {}// 自動設定長度
  StringPiece(const unsigned char *str)
      : ptr_(reinterpret_cast<const char *>(str)),
        length_(static_cast<int>(strlen(ptr_))) {}
  StringPiece(const std::string &str)
      : ptr_(str.data()), length_(static_cast<int>(str.size())) {}
  StringPiece(const char *offset, int len) : ptr_(offset), length_(len) {}
...
};

StringPiece不控制字串的生命週期,字串操作都是常數時間複雜度。

void clear() {
  ptr_ = NULL;  // 在操作時只需要修改指標指向就可以,沒有釋放空間的操作
  length_ = 0;
}
void set(const char *buffer, int len) {
  ptr_ = buffer;
  length_ = len;
}

相關文章