问题说明:
我自己一直很困惑一个问题,就是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
vector
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