在C++中,字符串不是作为基础的数据类型,而是作为一个类std::string,使用时需要包含头文件 #include
先来说说string类在使用时的一些不足之处。在对string对象进行初始化或者作为函数参数传递时,字符串需要进行拷贝(pass by value)。字符串的拷贝是比较耗时的,尤其字符串包含的字符数很多的时候。
针对这个问题,C++17引入了一个改进的新字符串类 string_view,主要是解决字符串拷贝的问题,使用string_view对象时,不需要进行字符串拷贝,其他方面跟使用string对象基本没区别。看示例代码:
#include
#include //c++ 17引入string_view
using namespace std;
//函数原型,参数类型为string_view
void printStr(string_view str);
int main()
{
string_view s{ "Hello world!" }; //用字符串常量初始化字符串s,无须进行字符串拷贝
printStr(s); //字符串作为函数参数传递时,无须进行字符串拷贝
return 0;
}
void printStr(string_view str)
{
cout << str << endl;
}
在VS中编译时,需要把工程属性中的C++版本设置成C++17(project->propertities->general->C++ language standard),之前的版本不支持string_view。
Visual Studio中设置工程的C++版本
【小结】本文简要介绍了C++ 17的新特性之一:string_view字符串类。从使用看,这个字符串新类,似乎自带某种“引用(reference)”的特性,从而避免了字符串的拷贝,既节约了内存空间,又提升了程序的效率。