关于string类型和字符串字面值的一个小问题

时间:2021-06-18 14:42:20
学习C++ Primer时看到书上说的一句话“字符串字面值与标准库string类型不是同一种类型”,有点疑惑,所以自己测试了一下。

如果定义 string s("Hello,world!");
然后输出sizeof s,结果是28
直接输出sizeof "Hello,world"结果是13

第二个结果我能理解,第一个为什么是28呢?

新手提问,要是有违规的地方还请多多包涵,提前谢过解惑的大神!

5 个解决方案

#1


你sizeof s是对这个s对象进行求它所在字节,也就是对string求所占字节数,与你的字符串所占字节数无关

#2


string 是一个类,知道不?

#3


引用 1 楼 ganpengjin1 的回复:
你sizeof s是对这个s对象进行求它所在字节,也就是对string求所占字节数,与你的字符串所占字节数无关



就是说不管s里面存储多长的字符串,s所占的存储空间都是28个字节吗?有点不太懂,要是字符串太长会不会存不下呢。。。

#4


string的成员中有个指针,它指向的内存才是真正放“字符串”的。

#5


引用 4 楼 ForestDB 的回复:
string的成员中有个指针,它指向的内存才是真正放“字符串”的。


这么说我就完全明白了,谢了

#1


你sizeof s是对这个s对象进行求它所在字节,也就是对string求所占字节数,与你的字符串所占字节数无关

#2


string 是一个类,知道不?

#3


引用 1 楼 ganpengjin1 的回复:
你sizeof s是对这个s对象进行求它所在字节,也就是对string求所占字节数,与你的字符串所占字节数无关



就是说不管s里面存储多长的字符串,s所占的存储空间都是28个字节吗?有点不太懂,要是字符串太长会不会存不下呢。。。

#4


string的成员中有个指针,它指向的内存才是真正放“字符串”的。

#5


引用 4 楼 ForestDB 的回复:
string的成员中有个指针,它指向的内存才是真正放“字符串”的。


这么说我就完全明白了,谢了