4
我需要将一些字符串合并到一个字符串中,出于有效的原因,我希望在这种情况下使用移动语义(当然这些字符串不会再被使用)。所以,我想C++:在字符串中追加语义#追加
#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!
它会导致同样的事情,如果operator+=
更换append
。什么是正确的方法来做到这一点?
我用G ++ 4.7.1在Debian 6.10
“C++ 11要求std :: string在连续内存中......”**任何类型的C/C++都要求字符串在内存中是连续的**,一个字符串是BYTEs /话。所以在任何情况下它都不可能是不连续的,因为你不能用'sz = str.c_str()来迭代它。 while(* sz){++ sz; }'。 – CodeAngry
@Claudrian:A *概念*字符串是一系列字符;不需要连续性。一个字符串* literal *是一个以'\ 0'字符结尾的连续字符数组。一个'std :: string'也是一个连续的字符数组。 SGI STL'rope'类当然是一个字符串,但是它并不需要连续存储。事实上,这是一个重点:在任意位置具有快速插入性能。 –