在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦的,好在C++中提供了 string 类型的支持,让我们在处理字符串时方便了许多。

首先,我写了一段测试代码,如下所示:

复制代码 代码如下:

#include

using namespace std;

int main(void)

{

string str_test1;

string str_test2 = "Hello World";

int value1, value2, value3;

value1 = sizeof(str_test1);

value2 = sizeof(str_test2);

value3 = sizeof(string);

cout<

cout<

cout<

system("pause");

return 0;

}

首先,我用G++编译运行,得到的结果如下图所示:

这说明string占4个字节。

这说明string占4个字节。

之后,我用VS2012编译运行,得到的结果如下图所示:

奇怪,这里string竟然占28个字节。

这里,我们注意观察,还会发现一个问题,不管有没有对string类型的变量赋值,或者是赋什么值,得到的结果是一样的。

下面,来解释上述问题:string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。    sizeof(string)=4可能是最典型的实现之一,不过也有sizeof()为12、32字节的库实现。通常,我们所用到的 string 类型一般都会是这样实现:

复制代码 代码如下:

class{

char *_Ptr;    //指向字符串的指针

int _Len;      //字符串的长度

........};

所以,我们一般接触到的string类型所占字节数为 8+。

c++语言中string类型,c++string类型占几个字节相关推荐

  1. C语言中int、long等类型所占的字节数

    C语言中int.long等类型所占的字节数.实验环境是win10,64位操作系统. #include<stdio.h> int main() {printf("sizeof(in ...

  2. c语言 单词变复数_关于C语言中的Complex(复数类型)和imaginary(虚数类型)

    关于C语言中的Complex(复数类型)和imaginary(虚数类型) 其实这里的复数complex就是数学里的复数,包含实部和虚部两个部分,比如:x=2.1+6i,下面进行详细介绍. C99 新增 ...

  3. c语言虚数变量,关于C语言中的Complex(复数类型)和imaginary(虚数类型)

    关于C语言中的Complex(复数类型)和imaginary(虚数类型) 其实这里的复数complex就是数学里的复数,包含实部和虚部两个部分,比如:x=2.1+6i,下面进行详细介绍. C99 新增 ...

  4. c语言中int转char数组,将int转换为4字节的char数组(C)

    可移植的方式(确保你得到0x00 0x00 0x00 0xaf无处不在)是使用shift: unsigned char bytes[4]; unsigned long n = 175; bytes[0 ...

  5. c语言中void和void*类型

    1.void的作用 c语言中,void为"不确定类型",不可以用void来声明变量.如:void a = 10:如果出现这样语句编译器会报错:variable or field ' ...

  6. 关于Linux—C语言中的bool类型

    关于Linux c语言中的bool数据类型 bool类型属于基本数据类型,其类型名称为bool,值域为非零(true)和零(false).如果我们不加入其他的头文件bool类型是会报错的.bool类型 ...

  7. Gox语言中的映射类型(字典类型)及其操作-GX8.1

    在Gox语言中,是用map类型来表示一般语言中的"字典"(dictionary)概念的,这与Go语言也是一致的.对map的声明.赋值和其他操作,我们来看看下面的例子.由于Gox语言 ...

  8. c语言中3%3e2%3e1的值,计算机编程基础

    1 . C语言源程序中主函数名是( ) A.masterB.leadingC.mainD.major2 . 下列程序的运行结果是()#include A.4,0,7B.5,-1,7C.4,0,5D.5 ...

  9. go语言中的big包

    package mainimport ("fmt""math/big" )func main(){// 数太大了怎么办?// 1.浮点类型可以存储非常大的数值, ...

  10. c++输出lpbyte类型_变量类型摸不清脉络?用typeid()试试,用一次就上瘾

    在python中,利用type()函数,可以很方便的判断变量类型.但是在c/c++中,判断变量类型,却不简单- 出于某个奇葩需求,简单研究了一下c/c++如何判断变量类型,整理总结在此,分享给大家,也 ...

最新文章

  1. wpf listview 添加控件_WPF开源控件扩展库 MaterialDesignExtensions
  2. hal库选择滴答时钟函数_STM32入门 : HAL库、标准外设库、LL库
  3. VMWare ubuntu虚拟机异常关闭打开报错:该虚拟机似乎正在使用中(下班虚拟机最好关闭,免得又异常关闭导致问题)(千万别在虚拟机下win+L锁屏,解锁后就打不开虚拟机了)
  4. java将日期作为文件名_获取当前时间作为文件名
  5. 使用npm安装TypeScript
  6. 微软官方pe工具_很好却不够香!微软官方免费数据恢复工具体验
  7. 天猫HTML练手项目,GitHub - txz1220/tianmao: 一个模仿天猫网页的项目
  8. 黑马Java学习笔记之-----数组
  9. java_Swing桌面程序开发
  10. delphi 热成像摄像机源代码_红外热成像技术广泛应用于夜间及恶劣气候下目标的监控...
  11. erlang中遍历取出某个位置的最大值
  12. 软件工程导论--软件工程概述
  13. Java项目:医院门诊收费管理系统(java+html+jdbc+mysql)
  14. 大学计算机word操作教程,word技巧大全:73个word实用技巧分享-电脑教程
  15. 苹果ios8_手机资讯:你必须要知道的iOS8实用小技巧汇总
  16. 《经济学原理》——读书笔记(一)
  17. ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Colored path-dp)
  18. 树莓派高阶课程7:树莓派博通BCM2835芯片手册导读
  19. 你能编写CMS79F623的EEPROM写入数据20到地址1,并且给出具体代码
  20. Python3 math模块以及运算优先级

热门文章

  1. SQL*Plus 系统变量之7 - BLO[CKTERMINATOR]
  2. 学情分析场景解读,助力教育机构提升课程质量和学员学习效果
  3. 5月刊推荐:怎样才是真正的架构师
  4. EL表达式、JSTL标签库、文件上传和下载
  5. Java的流程控制语句
  6. SQLServer中的Cross Apply、Outer Apply
  7. 从网页复制图片到word不显示的解决办法
  8. 工程伦理(2021春)第三章课后习题答案
  9. Subsurface Scatting 的简单模拟
  10. JavaBean之Builder模式