C++也就是C plus plus,人如其名,C++是C语言的升级版。C语言的字符串的本质是字符数组,它是以'\0'结尾的并将其作为结束标志,那么C++中的string类对象是不是也是以'\0'结束呢?
验证
string类对象的结尾有没有'\0'?
想要解决这个问题很简单,因为string类可以看作一个元素类型为char的顺序表,所以我们只需要看看string类对象下标为size的位置的内容是什么就行了。
经过实验我们我们发现,string类型对象确实会在末尾加上'\0',但是这个'\0'并不会计入到字符串的size和capacity中。
string类对象以'\0'作为结束标志吗?
从图中我们可以看见,'\0'被插入到了字符串中并计入到了size中,但是string类型在直接输出时,并没有以'\0'作为输出的结束标志;而转为C类型字符串输出时,把'\0'当作了结束标志。
因此可以得出结论,string类型对象并不会以'\0'作为结束标志。
小结
①C++中的string类对象会在末尾补上'\0',这是因为C++有C语言的历史包袱。因为C语言的字符串以'\0'结尾,所以为了方便在必要时将string字符串转为C类型字符串,所以string类型对象会在末尾补上一个不计入size和capacity的'\0'。
②C++中的string类对象并不会将'\0'作为结束标志,因为string类对象内部维护了一个记录自身长度的成员变量size,在输出string类对象时会根据size的大小决定输出多少个字符,而不是看'\0'的位置决定输出到哪个字符结束。
注:用双引号括起来的字符串也属于C类型的字符串,所以它也是会以'\0'结尾的。
以上为个人在学习路上的思考,如有错误还请指正!