C++中怎么理解string类的创建新string对象?

string sentence1("This ");
string sentence2("is.");
sentence1=sentence2+”\n";
书上说,用+运算符连接两个字符串都是在创建一个新的string对象,可是前后输出的&sentence1都是相同的,我该怎么理解这句话,如何得到新旧string对象的地址?

还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?
写错了,应该是sentence1=sentence1+“\n";

书上说,用+运算符连接两个字符串都是在创建一个新的string对象,可是前后输出的&sentence1都是相同的,我该怎么理解这句话,如何得到新旧string对象的地址?

能用+连接字符串,是因为string重载了+运算符,这跟调用函数是一样的,(这个函数可以是全局函数),有返回值,返回的是一个临时string对象,然后用=赋值给sentence1,这个赋值=也是重载过的,这个重载=的函数是string的成员函数,就好像你调用了sentence1.fuzhi(sentence2+”\n"
),sentence1的地址&sentence1当然不会变。注意,实际的字符串内存是在string内部的一个成员指针变量,可以通过sentence1.c_str()访问,而sentence1只是包装他的一个对象。

还有,+=运算符是在现有string对象的基础上修改,我想要是附加的string对象很长,以至于原有的string对象周围没有足够大的空闲空间存储,该怎么办?

既然stirng是包装的对象,那么它肯定有好处才那样做,其中之一就是不用担心实际字符串内存不够用的情况,当内存不够时会自动分配更大的内存,你不用担心。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-19
同学+运算符产生得是临时变量,临时变量赋完值以后就消失了。你说前后输出的都一样,那是肯定的,因为你输出的都是同一个对象。手机渣不解释了
第2个回答  推荐于2016-09-30
标准C++中提供的string类得功能也是非常强大的,一般都能满足开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用。
要想使用标准C++中string类,必须要包含
#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件
using std::string;
using std::wstring;

using namespace std;
第3个回答  2013-07-19
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;追问

不好意思,应该是sentence1=sentence1+“\n";

追答

没有+运算,要用 += 运算:
sentence1+=“\n";

第4个回答  2013-07-19
"用+运算符连接两个字符串都是在创建一个新的string对象"就是说sentence2+”\n" 是一个新的对象,然后将这个对象复制到sentence1,然后可能就释放了,但sentence1始终是一个地址

还有上面的 就我觉得软件应该会自动处理的吧 重新分配又或者提示错误啥的

C++primer中的问题,下面这段代码中,string* pstr = new string;到底是...
string和vector是相似的东西。string是个类,也可以当做类型来使用,new的时候会自动申请一块内存空间,当不够使用时再重新申请。可以拿string头文件看看。C++中很多都不需要指定长度什么的,它既然是一个完善的类,就会自动增添内存。

C++string类实例化和初始化
默认初始化:创建一个空的std::string对象。使用字面值初始化:通过C风格字符串字面值来初始化std::string对象。使用std::string字面值初始化:使用std::string字面值来初始化另一个std::string对象。std::string str1 = "Hello";std::string str2 = str1;使用std::move初始化:通过移动语义来初...

c++中的:string s;string *pa=new string; *pa=s与pa=&s的区别?
string s;\/\/内存划个空间给s,s表示一个字符串,这个空间是固定的,也就是地址是固定的。可以放不同的值,也就是不同的字符串。cout<<"input strings"<<endl;while(cin>>s)\/\/这句把字符串放到那个空间去,注意这是个循环,每次都会放入一个新串,前面的被覆盖。感觉就像,一套二手房,房主不...

string的C++ 中
string &operator=(const string &s);\/\/把字符串s赋给当前字符串string &assign(const char *s);\/\/用c类型字符串s赋值string &assign(const char *s,int n);\/\/用c字符串s开始的n个字符赋值string &assign(const string &s);\/\/把字符串s赋给当前字符串string &assign(int n,char c);\/\/用n个字符c...

c++编程问题,string类型怎么赋值,怎么引用
C++中,string是一个类(注意,不是类型)。它的赋值,直接将字符串等于给它,或将同类的变量赋给它即可。比如:string LSStr,LSStrA; \/\/定义 LSStr = 'aabbccdd'; \/\/赋值 LSStrA = LSStr; \/\/同类赋值 1、不同编译环境下的C++,对字符串的处理稍有差别。2、最原始的C语言中,没有string,...

c语言中string是什么意思(C语言string是什么数据类型)
string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象。C+...

c++ 为什么要用string去处理字符串(STL string详解)
string类作为C++中的核心组成部分,其设计的一大优点是隐藏了字符序列的底层实现细节,如数组维数和\\0的位置。程序员无需关心这些底层问题,只需要专注于编程逻辑,这大大减少了由于内存管理和初始化错误而产生的常见问题。例如,创建string对象时,它会自动初始化为“零”值,确保了数据的正确性和安全性。

[详解-字符串] C++必知必会 字符串-string常用各种操作解析
在C++编程中,字符串-string这个数据类型是处理文本数据的关键,string类的丰富操作功能使其在文本处理中不可或缺。本文将详细解析C++中string类的常用操作:1. 首先,你需要在代码中包含`#include `头文件。2. 定义字符串时,可以直接使用`std::string str = "初始值"`的方式。3. 获得字符串长度的...

C++string的用法问题,不知道为什么用不了string类型
因为 string 是 std命名空间下的,就和cout 一样..所以 修改的方法有两个..1 加 命名空间 限定 std::string name;2 使用 using using std::string;

c++中如何在循环结构中创建新的string
不用每次都创建新的吧,在进入循环前创建一个string,进入循环后,每次在循环的末尾调用clear就行了吧:string a;for(){ \/\/给string赋值 a = ...;\/\/其余操作 ...\/\/清空string内容 a.clear()} ADD:你要是在循环过后仍然想使用这些string的话,可以利用vector<string>去做,每次循环都往里插入...

相似回答