C++中字符串 + 整形是什么意思?

int d=5;
比如string str = "" + d;
我知道这个语句的作用是把5转成string型,但是原理是什么我不知道,麻烦解释下

string str = "" + d ; // 未定义行为

"" + d ;
是指针运算, 把char*的指针 + 5
等于 char p = "" ; p + 5 ; // p是指向静态存储区, + 5让指针递增5个字节
然后你把
string str = (char* )p赋值给str, 恰好string的构造函数接收char*类型
所以str的内容为(char*)(p + 5 )开始的内存地址, 直到遇到0结束的内容, 也就是随机值.

str可以+ char*, 如果加整数就是 str + char( int )

如果你认为上面的回答是乱七八糟的回复, think twice !
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-08

在这里str变量被声明为一个string对象,它拥有一个对“operator+”运算符的重载:

 string& operator+(int i);

“+”运算符在接收一个int型变量后,会自动调用这个方法,他会把数转成字符串连在后面。

具体的可以看看C++关于运算符重载的部分:

 return_type/*返回值类型,可以是类类型*/
 operator+/*或者其他要重载的运算符*/(/*形参列表*/);

这样声明在类中,并和普通函数一样实现就可以了。

追问

是要自己重载之后才能实现吗?那如果没有重载是什么意思呢?

追答

string类本身是编译器提供的,不需要我们自己实现任何方法。这个“+”运算符也是包含在标准库里的,写上

#include <string>

之后直接用就可以了。

如果是自己的类,没有重载“+”或其他运算符就使用,会导致一个编译错误。

第2个回答  2013-11-08
楼上是错的,string里!绝对!没有这样一种实现,因为这样的operator+容易产生阅读歧义;
除非你自己实现这样的重载;
string str = "" + 5 会被解释为常量区中""的地址后的第五个字节,并用该位置与第一个\0间的内容,调用strin的构造函数;
第3个回答  2013-11-09

不是把5变为string型。看下面的图片,自己琢磨是啥意思。

相似回答