我需要将一些字符串合并成一个,为了效率的考虑,我想在这种情况下使用移动语义(当然这些字符串将不再被使用)。所以我尝试了以下代码:
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string hello("Hello, ");
std::string world("World!");
hello.append(std::move(world));
std::cout << hello << std::endl;
std::cout << world << std::endl;
return 0;
}
我认为它将会输出
Hello, World!
## NOTHING ##
但实际上它输出了。
Hello, World!
World!
如果将append
替换为operator+=
,它将产生相同的结果。那么应该如何正确地实现?
我在Debian 6.10上使用g++ 4.7.1。
\0
字符结尾的连续字符数组。std::string
也是一个连续的字符数组。SGI STL的rope
类肯定是一个字符串,但没有要求它在连续的内存中。事实上,这就是重点:在任意位置具有快速插入性能。 - Nicol Bolas