僻人 level
获赞
4
粉丝
0
关注
5
看过 TA
6
华南师范大学
2021
Web前端
IP属地:CloudFlareDNS
暂未填写个人简介
私信
关注
2021-01-11 16:07
已编辑
华南师范大学 Web前端
string s; s = "abc"+'b'; cout<<s<<endl; 代码的输出是:crt\crtw32\stdcpp\locale0.cpp string s; s = "abc"; s += 'b'; cout <<s << endl; 代码的输出是:abcb 想请教一下这是什么原因?
四度读读书:"abc"是字符串字面量,类型可以理解成是 const char[4], "abc"存放在程序的只读代码段中的.rodata中,你可以理解成在内存某个地方,假设其起始地址是0x7ffcb5ea8e88, 方便理解的话,如果有const char* p = "abc", p的值就是0x7ffcb5ea8e88 'b'是字符字面量,类型是char,'b'的ASCII码值为98,对p进行加法操作,编译器实际上进行的是sizeof(char) * 98 + 0x7ffcb5ea8e88;你把这个结果赋值给s,而s类型为string,在C++里面string是一个类,重载了operator=(const char* p),会把p指向的内容赋給s,但是p的值经过刚刚的加法操作被我们改变了,它指向的地方是sizeof(char) * 98 + 0x7ffcb5ea8e88,里面的内容自然不是我们想要的,所以会看到一串乱码。 下面那个正常是因为string类里重载了operator+=(char c),函数里面进行的操作可以理解成s1.push_back(c)。
投递百度等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务