C++定义和初始化string对象实例详解

正文

在c++当中,标准类型string来代表可变长的字符串序列,使用string需要加载string 头文件,而方法定义在命名空间std当中,所以使用的基本结构:

#include <string>
int main(){
 using std::string;
 string str1 = "hello world";
 return 0;
}

当然也可以结合之前的输入输出部分:

#include <iostream>
#include <string>
int main(){
 using namespace std;
 string str1 = "hello world";
 cout << str1 << endl;
 return 0;
}

这里可以看出,std命名空间包含了iostream头文件当中的cout和endl,也包含了string 头文件当中的string

定义string

和其他的变成语言的思路类似,标准类型string可以定义string类型的字符串(嘿嘿嘿,好像一句废话),常见的定义方式如下:

string str1; //声明一个空的字符串
string str2 = str1; //声明一个str2,它是str1的副本
string str3 = "hello world"; //上面做过的一种写法,str3是字符串字面值的副本
string str4(10,'b'); //str4的内容是 bbbbbbbbb ,这里要注意第二给参数需要是字符而不是字符串

这里聊到了一个概念叫做字面值,其实就是字面值常量,形如38这样一个一望而知的值被称为字面值常量,每个字面值常量都对应一种数据类型,我们上面聊的就是string类型的字面值常量,但是需要细致区分的是字符和字符串字面值:

'a' //字符字面值
"hello world" //字符串字面值

除了肉眼可见的长度和引号(尽管看得见,必须要仔细)的区别外,编译器会在每个字符串后面添加一个空字符'\0',因此字符串字面值的长度要比肉眼所见的+1

初始化string

当对象创建是获得了一个特定的值,我们就可以说这个值被初始化了,通过string类型我们来看一下初始化的分类:

全面初始化

使用花括号包围的初始化被称为全面初始化,这个是c++11的新特性,比如:

string str4(10,'b');

默认初始化

定义变量的时候没有指定初始的值,这种也是初始化,被称为默认初始化,变量的值的类型由变量的类型来决定,比如:

string str1;

拷贝初始化

使用等于号进行初始化就是拷贝初始化,因为实际上是编译器把等号右侧的初始值拷贝到等号左侧的新创建的对象当中,(如果基于面向对象理解:直接初始化实际上是要求编译器选择参数最匹配的一般构造函数)比如:

string str2 = str1;
string str3 = "hello world";

直接初始化

嘿嘿嘿,域拷贝初始化相反,不使用等号进行初始化(其实就是不进行赋值拷贝动作),就是直接初始化,比如:

string str4(10,'b');
作者:老边

%s 个评论

要回复文章请先登录注册