C++中怎么理解string类的创建新string对象?
stringsentence1("This");stringsentence2("is.");sentence1=sentence2+”\n";书上说,用+运算符连接两个...
string sentence1("This ");
string sentence2("is.");
sentence1=sentence2+”\n";
书上说,用+运算符连接两个字符串都是在创建一个新的string对象,可是前后输出的&sentence1都是相同的,我该怎么理解这句话,如何得到新旧string对象的地址?
还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?
写错了,应该是sentence1=sentence1+“\n"; 展开
string sentence2("is.");
sentence1=sentence2+”\n";
书上说,用+运算符连接两个字符串都是在创建一个新的string对象,可是前后输出的&sentence1都是相同的,我该怎么理解这句话,如何得到新旧string对象的地址?
还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?
写错了,应该是sentence1=sentence1+“\n"; 展开
5个回答
展开全部
书上说,用+运算符连接两个字符串都是在创建一个新的string对象,可是前后输出的&sentence1都是相同的,我该怎么理解这句话,如何得到新旧string对象的地址?
能用+连接字符串,是因为string重载了+运算符,这跟调用函数是一样的,(这个函数可以是全局函数),有返回值,返回的是一个临时string对象,然后用=赋值给sentence1,这个赋值=也是重载过的,这个重载=的函数是string的成员函数,就好像你调用了sentence1.fuzhi(sentence2+”\n"
),sentence1的地址&sentence1当然不会变。注意,实际的字符串内存是在string内部的一个成员指针变量,可以通过sentence1.c_str()访问,而sentence1只是包装他的一个对象。
还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?
既然stirng是包装的对象,那么它肯定有好处才那样做,其中之一就是不用担心实际字符串内存不够用的情况,当内存不够时会自动分配更大的内存,你不用担心。
能用+连接字符串,是因为string重载了+运算符,这跟调用函数是一样的,(这个函数可以是全局函数),有返回值,返回的是一个临时string对象,然后用=赋值给sentence1,这个赋值=也是重载过的,这个重载=的函数是string的成员函数,就好像你调用了sentence1.fuzhi(sentence2+”\n"
),sentence1的地址&sentence1当然不会变。注意,实际的字符串内存是在string内部的一个成员指针变量,可以通过sentence1.c_str()访问,而sentence1只是包装他的一个对象。
还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?
既然stirng是包装的对象,那么它肯定有好处才那样做,其中之一就是不用担心实际字符串内存不够用的情况,当内存不够时会自动分配更大的内存,你不用担心。
展开全部
同学+运算符产生得是临时变量,临时变量赋完值以后就消失了。你说前后输出的都一样,那是肯定的,因为你输出的都是同一个对象。手机渣不解释了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
标准C++中提供的string类得功能也是非常强大的,一般都能满足开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用。
要想使用标准C++中string类,必须要包含
#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件
using std::string;
using std::wstring;
或
using namespace std;
要想使用标准C++中string类,必须要包含
#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件
using std::string;
using std::wstring;
或
using namespace std;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sentence1=sentence2+”\n"; 语法好像不对,string 是 class , 没有这样的运算。也没有这样的创建。
+=运算符是在现有string对象的基础上修改,对象很长也没关系,存放空间 应当类似 realloc, 自动增加。
这样可以:
string sentence1("This ");
string sentence2("is abc abc 123 456 xyz..............");
cout << sentence1.c_str() << endl;
sentence1+=sentence2 ; // 这样可以
cout << sentence1.c_str() << endl;
+=运算符是在现有string对象的基础上修改,对象很长也没关系,存放空间 应当类似 realloc, 自动增加。
这样可以:
string sentence1("This ");
string sentence2("is abc abc 123 456 xyz..............");
cout << sentence1.c_str() << endl;
sentence1+=sentence2 ; // 这样可以
cout << sentence1.c_str() << endl;
追问
不好意思,应该是sentence1=sentence1+“\n";
追答
没有+运算,要用 += 运算:
sentence1+=“\n";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
"用+运算符连接两个字符串都是在创建一个新的string对象"就是说sentence2+”\n" 是一个新的对象,然后将这个对象复制到sentence1,然后可能就释放了,但sentence1始终是一个地址
还有上面的 就我觉得软件应该会自动处理的吧 重新分配又或者提示错误啥的
还有上面的 就我觉得软件应该会自动处理的吧 重新分配又或者提示错误啥的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询