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

本文探讨C++中string默认初始化与使用初始化的区别。前者未创建新对象,后者则在string pool中创建空对象。通过vector<string>实例展示两者在内存占用上的不同,初始化明确分配空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题说明:

我自己一直很困惑一个问题,就是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循环这样的语句时,就应该使用 "" 来初始化。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值