学习这个,了解到的东西就是
一个函数的返回值如果是对象引用,那么这个返回值绝不能是一个局部变量;如果函数返回值是一个对象,那么返回值就是对象的副本了。
#ifndef _str_H
#define _str_h
#include"vec.h"
#include<cstring>
#include<cctype>
#include<algorithm>
#include<iterator>
class Str{
Vec<char> data;
friend std::istream& operator>>(std::istream&,Str&);
public:
typedef Vec<char>::size_type size_type;
Str() { }
Str(size_type n,char c):data(n,c) { }
Str(const char* s) {std::copy(s,s+std::strlen(s),std::back_inserter(data)); }
template <class In> Str(In a,In b){ std::copy(a,b,std::back_inserter(data)); }
size_type size()const {return data.size();}
char& operator[](size_type i) {return data[i];}
const char& operator[](size_type i)const {return data[i];}
Str& operator+=(const Str& s){
std::copy(s.data.begin(),s.data.end(),std::back_inserter(data));
return *this;
}
};
s