在C++中,string
是标准库中用于处理字符串的类,定义在 头文件中,它提供了方便、灵活的字符串操作功能。以下是一些常见的定义和初始化string
对象的方法:
1. 默认初始化
可以直接定义一个空的string
对象,语法如下:
#include <string>
using namespace std;
string str;
// ""
这样就创建了一个名为str
的string
对象,初始时它不包含任何字符,长度为0。
2. 使用字符串字面量初始化
可以使用双引号括起来的字符串字面量来初始化string
对象,示例如下:
string str1 = "Hello";
// "Hello"
string str2("World");
// "World"
在上述代码中,str1
和str2
都通过具体的字符串字面量完成了初始化,str1
的值初始化为"hello"
,str2
的值初始化为"World"
。
3. 从其他 string 对象初始化
可以使用已有的 string
对象来初始化一个新的 string
对象,实现复制的效果,例如:
string source = "Original";
string target(source);
// "Original"
这里target
会被初始化为和source
一样的字符串内容,即字符串 "Original"
。
4. 指定长度和初始字符初始化(C++11及之后版本支持)
可以指定创建的string
对象的长度,并指定用某个字符进行填充初始化,示例如下:
string filled(10, '*');
// "**********"
这里filled
会被初始化为一个长度为10,且每个字符都是'*'
的字符串"**********"
。
5. 使用花括号初始化器(C++11及之后版本支持)
std::string str{"Hello"};
// "Hello"
或者
string str = {"Hello"};
// "Hello"
上述代码中,str
会被初始化为字符串"Hello"
。
6. 使用部分字符范围初始化(C++11及之后版本支持)
可以利用已有string
对象的部分字符范围来初始化新的string
对象,比如:
string origin = "abcdefg";
string part(origin.begin() + 2, origin.begin() + 5);
// "cde"
上述代码中,part
会被初始化为包含从origin
中索引为2(对应字符'c'
)开始到索引为4(对应字符'e'
)结束的字符,也就是字符串"cde"
。
7. 通过移动语义初始化(C++11及之后版本支持)
如果有一个临时的string
对象(比如函数返回的string
临时值),可以利用移动语义高效地初始化新的string
对象,例如:
string createTempString() {
return string("Temp");
}
int main(){
string newStr = createTempString();
// "Temp"
return 0;
}
在这个例子中,newStr
通过移动语义接收了createTempString
函数返回的临时string
对象的资源,避免了不必要的复制开销,实现了高效初始化。
总之,以上是string
的几种初始化方法,大家可以根据不同的需求选择合适的初始化方式。