中易网

c++ string sizeof的问题。

答案:3  悬赏:60  
解决时间 2021-03-22 04:06
帮我看下那个32是怎么来的,我给忘了,hello不是5个字符吗?应该是5啊。



最佳答案
C++的string和C语言的字符串数组是有区别的,C风格的字符串数组的大小被限定在定义时的长度上,而C++标准库中的string类的对象在创建时会保留额外的内存空间,以便于用户调用append成员函数或者给string对象重新赋值时不会发生越界行为。在你的编译器的情况下保留的空间是32字节,这可以保证string对象的值为长为31及以下字符串时不用重新分配内存,加快string对象的运行时效率。其实C++标准库的许多类或类模板用了类似的保留内存技术,比如std::vector<>保留了特定的内存,std::function<>保留了24字节的内存。
所以说,即使string对象含有5个字符,其内存大小绝不是sizeof(char)*6(不是5)。
有一个问题需要纠正,"hello"大小为6,你忘了算'\0'字符串结尾字符也是字符串一部分
全部回答
string是类,其中32是这个类的大小,你所说的5指的值string这个类指向的字符串的长度
对 string 求 sizeof 没有意义。 要获得字符串长度应该用string 的成员函数 length() 或 size() 。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
淘宝卖家虽然同意退货申请了,但辱骂买家,怎
如何将好听的歌曲下载到手机
北京朝阳区东三环广渠门外大街优士阁大厦A座1
吊扇灯的电机为何大多是153*15的?
小米2A现在手机店能买到吗?
年三十给人压岁钱多少?
195/R14.195/60R14.195/70R14几个规格的轮胎
推从是什么意思
霍邱县六安中国信合24小时自助银行(马店信用
有拼车从武陟到郑州火车站的吗?
藏族人喜欢什么颜色
我是被告,庭审后,原告同意调解,法官一再打
(2006?闵行区模拟)中国第一跨海大桥(上海
数码照相机的种类
FAB法则是什么
推荐资讯
三品五弦是什么音?
勃起功能障碍怎么锻炼
北京 大众朗逸
早上腰疼撒尿后减轻是怎么回事
网页游戏有没有类似CS的网页游戏啊?
永保汽车销售服务有限公司地址在什么地方,我
塑料油箱进料一般检验什么
229路公交车转几路车到三元里大道北
overture 如何中途改拍子,如前面是二四拍,
剪刀石头布第一季哪一集是制作卡片收纳袋的
重庆市梁平县邮编是多少
在湛江网上订票是去湛江西站取还是湛江南站取
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?