将字符串移动到容量足够的另一个字符串

时间:2016-08-21 22:24:47

标签: c++11

int main() {
   std::string str;
   str.reserve(9999);

   {
      std::string s1("aaa");
      std::string s2("bbb");
      // can both strings s1, s2 be moved to str?
      // for example str should be "aaabbb"
    }

}

我的问题:是否有可能窃取s1s2的记忆以形成s1s2的连接字符串(因为它已经有足够的空间用于两者)?

1 个答案:

答案 0 :(得分:1)

因为用于std::string的内存必须是连续的,所以无法窃取两个独立字符串的内存。

从C ++ 14开始,第21.4.1 / 4节:

  

basic_string对象中的char类对象应连续存储。也就是说,任何basic_string   对象s,标识&*(s.begin() + n) == &*s.begin() + n应保留n的所有值,使得0   < = n< s.size()。