C++ string初始化为空的问题 默认初始化和双引号初始化

问题说明:

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

string str1;
string str2{""};

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

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

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

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

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

 

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

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
	vector<string> str{""};
	vector<string> temp;
	str.push_back("zhao");
	temp.push_back("zhao");
	cout<<"the size of str: "<<str.size()<<endl;
	cout<<"the size of temp: "<<temp.size()<<endl;
	
	for(auto z:str)
	{
		cout<<z<<"kk    ";
	}
	cout<<endl;
	cout<<temp[0]<<endl;
	return 0;
}

输出: 

the size of str: 2
the size of temp: 1
kk    zhaokk    
zhao

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

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

 

 

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C++中,可以使用几种方式来初始化字符串: 1. 使用字符串字面值直接初始化:可以使用双引号将字符串括起来,赋值给一个string对象。例如,string s = "abc";可以将字符串"abc"直接赋值给s。 2. 使用另一个字符串对象进行初始化:可以使用另一个string对象来初始化一个新的string对象。例如,string s2 = s1;或者string s2(s1);可以将s1的值赋给s2。 3. 使用字符数组进行初始化:可以使用字符数组来初始化一个string对象。例如,可以使用strcpy函数将字符数组的值复制到string对象中。例如,strcpy(arr1, arr2);可以将arr2中的值复制到arr1中。 4. 使用字符串字面值初始化字符数组:可以使用双引号将字符串括起来,赋值给一个字符数组。例如,char dog[20] = "abc";可以将字符串"abc"赋值给dog数组。 总结起来,C++中可以使用字符串字面值、另一个字符串对象、字符数组等方式来初始化C字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++string字符串初始化与使用](https://blog.csdn.net/qq_35129075/article/details/124291869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【C++初始化string对象的几种方式](https://blog.csdn.net/wingrez/article/details/87905253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值