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'類當然是一個字符串,但是它並不需要連續存儲。事實上,這是一個重點:在任意位置具有快速插入性能。 –