最近遇到个这个问题
string一个空的字符串,楼主想往里面写入字符 并且输出
但是没有结果输出
这样是没有输出的
可以看出
s=s+"nihao"; s变成了 nihao
然后通过s[i] 写入数据
变成 abcdo
这里s[10]写入m
s的长度仍为5
输出也是abcdo
当时我在想 为什么cout 不输出s这个字符串的所有内容呢?
也就是为啥不输出到s【10】为止
既然要输出所有内容 那么必须知道s的长度
而s是一个string类型
如果构造的时候传入的是空字符串
那么string的mdata就新申请一个字符字节的内存并且赋值为空
如果是某个字符串
就申请一堆内存 然后把这个字符串的值赋值到mdata里面
详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数_C 语言_脚本之家 (jb51.net)
(55条消息) 【C++】String类中的运算符重载_Irean_Lau的博客-CSDN博客
(55条消息) c++ string 函数的重载_believexfr的博客-CSDN博客
+=号背后发生了什么?
这里是size就是length
可以看出 当用了重载后的运算符+号之后
length 才发生了变化
而cout应该也是根据这个长度输出的s
我们再修改一下程序
直接对s【i】操作
length会不会变化呢?
我们在末尾加入两个字符
可见 ,是没有变化的
总结
string是一个类 与 char* 有本质的区别
运算符是重载之后的,直接用【】来访问 跟+ 号是不一样的
这是楼主第一次写文章,如果有错误,请多多包涵,评论区可以提出问题 ,谢谢