STL中的string的substr有关问题
STL中的string的substr问题不知道大家有没有想过这样的问题C/C++ codechar *buf abcdefgstring s1(bu
STL中的string的substr问题
不知道大家有没有想过这样的问题
C/C++ codechar *buf = "abcdefg";string s1(buf);string s2 = s1.substr(0,3);
substr成员函数先要构造一个只包含字符 abc 的一个string的对象,那么s2只是引用了这个对象还是重新构造一个对象,把substr的返回值拷贝到自己的对象里?
[解决办法]那么s2只是引用了这个对象还是重新构造一个对象
---
重新构造一个
[解决办法]string s2 = s1.substr(0,3); //这样调用 operator = 拷贝构造了!
[解决办法]string s2 = s1.substr(0,3);
s2调用拷贝构造函数了,肯定是构造了个新对象
还有
C/C++ codebasic_string substr( size_type _Off = 0, size_type _Count = npos) const;
[解决办法]
拷贝构造了一个
[解决办法]
S2应该是重新构造了,然后substr返回的那个再通过拷贝构造函数过来
[解决办法]
重新构造一个
[解决办法]
[解决办法]
string s2 = s1.substr(0,3);//
隐式调用拷贝构造函数,string s2后接=实现为一步 调用拷贝构造函数
[解决办法]
C/C++ code# include <iostream>using namespace std;class C{public: C(int i):n(i){cout << "Construct C" << i << endl;} C(const C& c){n = c.n; cout << "Construct _C" << c.n << endl;} ~C(){cout << "Destruct C" << n << endl;} C& operator= (const C& c){cout << "Copy from C" << c.n << " to " << "C" << n << endl; /*n = c.n;*/}//没有变n的值private: int n;};C f(int i){ C c(i); return c;}int main(){ C c0 = f(0); c0 = f(1);system("PAUSE"); return 0;}
[解决办法]
[解决办法]
这里会隐式调用拷贝构造函数。
拷贝构造函数的语义和赋值构造函数的语义是不一样的。
前者是用一个对象初始化一个尚未被初始化的对象
而赋值构造函数的语义是,用一个对象,去赋值另外一个已经存在的对象。
比如说:
string s1 = "hello";
string s2 = s1; // 拷贝构造函数被调用
string s3 = "world";
s3 = s1; //赋值构造函数被调用。
[解决办法]
返回的不是引用,所以是重新构造了个对象