c++新手遇到一个问题,百度不到答案,想请教大家。

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&(1071)#39;是字符字面量,类型是char,'b&#39;的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)。
7 回复 分享
发布于 2021-01-11 18:45
Cpp里面字符串是指针定义的,两个指针不能加,但是下面的变量加指针可以的
2 回复 分享
发布于 2021-01-11 16:30
害,这就是C++坑爹的地方,C字符串和string类经常搞混。我也经常犯错。不要随便对字符串做四则运算,况且C++的string类也是很奇怪的。
1 回复 分享
发布于 2021-01-11 21:25
因为string是一个类,这个类里面只重载了operator+=,所以可以用+=进行字符或字符串追加,但是string类里面并没有重载operator+,所以不能用+操作符进行字符串追加
1 回复 分享
发布于 2021-01-12 09:46
点赞 回复 分享
发布于 2021-01-11 16:07
第一个代码输出:"crt\crtw32\stdcpp\locale0.cpp"?
点赞 回复 分享
发布于 2021-01-11 17:50
单独的“a+b”是字符串常量,属于不可修改;
点赞 回复 分享
发布于 2021-01-11 22:32
单引号和双引号的问题,楼上正解
点赞 回复 分享
发布于 2021-01-12 10:13
搁这玩python
点赞 回复 分享
发布于 2021-01-15 02:00

相关推荐

扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
2 3 评论
分享
牛客网
牛客企业服务