F.2.4 使用左值引用的构造函数
复制构造函数类似于下面这样:
它使用一个string参数初始化一个新的string对象:
其中,ida将是mel管理的字符串副本。
下一个构造函数要求您指定一个分配器:
调用这两个构造函数中的任何一个后,将存在如下关系:
data( )方法返回一个指针,该指针指向分配的数组副本,该数组的第一个元素是str.data( )指向的;
size( )方法返回str.size()的值;
capacity( )方法返回一个至少等于size( )的值。
再下一个构造函数让您能够指定多项内容:
第二个参数(pos)指定了源字符串中的位置,将从这个位置开始进行复制:
位置编号从0开始,因此,位置4是字符p。所以,et被初始化为"phone home"。
第3个参数n是可选的,它指定要复制的最大字符数目,因此下面的语句将pt初始化为字符串"phone":
然而,该构造函数不能跨越源字符串的结尾,例如,下面的语句将在复制句点后停止:
因此,该构造函数实际复制的字符数量等于n和str.size( )-pos中较小的一个。
该构造函数要求pos不大于str.size( ),也就是说,被复制的初始位置必须位于源字符串中。如果情况并非如此,该构造函数将引发out_of_range异常;否则,该构造函数被调用后,copy_len将是n和str.size( )-pos中较小的一个,并存在下面的关系:
data( )方法返回一个指向字符串的指针,该字符串包含copy_len个元素,这些元素是从str的pos位置开始复制而得到的;
size( )方法返回copy_len;
capacity( )方法返回一个不小于size( )的值。