关于C++的sizeof(string)

看书的时候看到一道题,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’的知识点。。。

猜你喜欢

转载自blog.csdn.net/weixin_41713281/article/details/79804415