问题说明:

我自己一直很困惑一个问题,就是string用默认初始化和用双引号什么也不加初始化。一直以来,都说这两种方法都是初始化为空,那么有什么区别吗?最近做leetcode题的时候遇到了这个问题,发现还是大有区别的。

string str1;

string str2{""};

我个人对这个问题的理解有限,而且也不是太好阐述,欢迎指正。

区别: (用下面两种表述方式尽可能解释)

1、"" 表示一个string已经创建在了string pool中,但是默认初始化表示什么也不存在。

2、""初始化,也即是str2。表示创建了一个string对象,并且给它分配了"",或者说分配了一个空string对象。通过这种方式初始化,我们创建的变量指向了这个string对象。

但是,我们使用默认初始化的时候,我们并没有创建一个新的string对象。

下面我通过一个vector的对象来说明这个问题,在这里就很明显了;通过输出可以看出,初始化为"" ,是实实在在地占了一个位置。而默认初始化却没有。

#include

#include

#include

using namespace std;

int main()

{

vector str{""};

vector temp;

str.push_back("zhao");

temp.push_back("zhao");

cout<<"the size of str: "<

cout<<"the size of temp: "<

for(auto z:str)

{

cout<

}

cout<

cout<

return 0;

}

输出:

the size of str: 2

the size of temp: 1

kk zhaokk

zhao

注:这两种方式初始化一个string都可以使用 str+a_string的用法。即str1+"zhao"和str2+"zhoa" 都是可以的。

要是需要对vector用范围for循环这样的语句时,就应该使用 "" 来初始化。