关于C++的sizeof(string)

本文通过实验探讨了在不同编译环境下,使用sizeof运算符测量string类型变量大小的结果差异,并解释了这些差异背后的原因。

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

看书的时候看到一道题,string a1 = “CHINA”;则”cout << sizeof(a1);”他的输出结果应该是多少?
A.32 B.5 C.6 D.无限
原本第一念头就是选6,因为字符串的结尾还有个’\0’结束符,所以长度要+1;
但是又想到string的实现是以char数组或者char指针的形式来实现的,那么sizeof()一个string变量名,就相当于sizeof()一个指针了,那么它的返回值就应该是4,而不是上述的答案;于是还是做个测试吧!然而测试结果还是出乎我意料的:
1. 使用g++编译器:

string a = "CHINA";
cout << sizeof(a) << endl;

输出结果是4.(也就是说在这里是以指针类型去看待的)
2. 使用vs2017 x86
相同的代码段,执行结果是 28;
3. 使用vs2017 x64
执行结果是40;
下面这两种结果的出现,应该是由于不同环境下对于sizeof操作符的定义不一致吧。
于是还是查看官方文档吧:sizeof
这里写图片描述
第一句话就说明了,sizeof是受计算机架构影响的(简单理解就是硬件环境吧),也就是说如果这段代码在不同的环境下运行,其结果可能是不一致的。
所以说,课本上的内容并不严谨,直接使用sizeof(“CHINA”)才能达到考察字符串结尾包含了’\0’的知识点。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值