首页 > 编程语言 >C++中StringPiece了解

C++中StringPiece了解

时间:2024-04-28 23:55:49浏览次数:25  
标签:char const C++ StringPiece length 了解 str ptr

转自: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;
}

 

标签:char,const,C++,StringPiece,length,了解,str,ptr
From: https://www.cnblogs.com/BlueBlueSea/p/18164787

相关文章

  • c++ 快速复习第一部份
    去年有事无事学过一c++,,由于工作用不上,学来没有用,所以学得乱七八的,最近需要复习一下,因为最近想学习一下硬件相关第一  引用头文件和自定义头#include<iostream>usingnamespacestd;//引用命名空间可以避免使用::语法intmain(){默认输出写法:std::cout<<"Hello,wor......
  • C++ 异常处理机制详解:轻松掌握异常处理技巧
    C++异常处理C++异常处理机制允许程序在运行时处理错误或意外情况。它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠。异常处理的基本概念:异常:程序在运行时发生的错误或意外情况。抛出异常:使用throw关键字将异常传递给调用堆栈。捕获异常:使用try-cat......
  • C++编程英语词汇
    abstract抽象的abstraction抽象性、抽象件access访问accesslevel访问级别accessfunction访问函数adapter适配器address地址address-ofoperator取地址操作符aggregation聚合algorithm算法allocate分配allocator分配器application应用程序architecture体系结构argu......
  • C++多态与虚拟:Objects 实例化(Objects Instantiation)探究
    一、Objects的创建依据已有的classCPoint,我们可以产生一个或多个object(对象),或者说是产生一个instance(实体):CPointaPoint(7.2);//aPoint._x初始值为7.2aPoint.x(5.3);//aPoint._x现值为5.3这样的objects可能放在函数的stack之中(对象是在函数内部创建的,......
  • vue了解与初步接触/使用
    Vue使用1、vue的启动1、Vue的操作命令启动.Vue去你对应的包里直接yarnserve2、首先先需要检测自己是否安装了yarn命令yarn命令和npm的区别1、yarn是从国内下载npm是从国外下载所以yarn速度效率比较高,npm速度效率比较低2、yarn-v--可以检测到是否有yarn命......
  • Installation requirements for SAP Kernels on Windows (C++ runtime environment, V
      Symptom在Windows执行StartSAP,报错信息找不到指定的模块:"Theprogramcan'tstartbecausemsvcr100.dllismissingfromyourcomputer.""无法启动此程序,因为计算机中丢失了msvcr100.dll。尝试重新安装该程序以解决此问题。" OtherTermsC,C++,runtime,VCred......
  • C++火车头
    点击查看火车头#pragmaGCCoptimize(3)#pragmaGCCtarget("avx")#pragmaGCCoptimize("Ofast")#pragmaGCCoptimize("inline")#pragmaGCCoptimize("-fgcse")#pragmaGCCoptimize("-fgcse-lm")#pragmaGCCoptimize(......
  • C/C++:new/delete与malloc/free的区别
    `new`和`delete`是C++中的关键字,而`malloc()`和`free()`是C语言中的函数。它们在内存分配和释放方面有几个重要区别:1.**类型安全性**:-`new`和`delete`是C++中的运算符,它们会自动计算所需的内存大小,并返回正确类型的指针。这意味着你不需要在使用时显式指定......
  • lib 安装失败,error Microsoft Visual C++ 14.0 is required.
    即使安装c++要占用c盘4G,而且仍然有可能报错,error:command'C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\BIN\x86_amd64\cl.exe'failedwithexitstatus2另一种解决方法是直接下载whl,省去编译的过程https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib有可能......
  • python C++混合编程环境搭建
    一、python环境1.下载python安装包2.安装python(选择下载符号文件和二进制文件)注:多半会报错“Error0x80072f7d:FailedtosendrequesttoURL:……”,因为下载超时导致安装失败解决:1)手动下载core_pdb.msi等文件https://www.python.org/ftp/python/3.8.0/win32/(选择......