4
하나의 문자열을 병합해야하는데, 효율적인 이유 때문에이 상황에서 move semantic을 사용하고 싶습니다. 물론 그 문자열은 더 이상 사용되지 않습니다. 그래서 나는 그것을 출력C++ : 문자열에서 문자열 이동 # append
Hello, World!
## NOTHING ##
하지만 operator+=
에 의해 append
를 교체 할 경우 실제로 출력
Hello, World!
World!
그것은 같은 일이 발생할 것입니다 가정
#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;
}
을 시도했다. 그 일을하는 올바른 방법은 무엇입니까?
나는 당신이 다른 string
의 string
에 일부을 이동할 수 없습니다 데비안 6.10
"C++ 11에서는 std :: string에 인접한 메모리가 있어야합니다"... ** 모든 종류의 C/C++에서는 문자열이 메모리에서 연속적이어야 함 **, 문자열은 BYTE/말. 따라서 어떤 상황에서도'sz = str.c_str();을 사용하여 반복 할 수 없기 때문에 인접하지 않을 수 없습니다. while (* sz) {++ sz; }'. – CodeAngry
@Claudrian : * 개념적 * 문자열은 일련의 문자입니다. 인접성은 요구되지 않는다. 문자열 * 리터럴 *은'\ 0' 문자로 끝나는 연속 된 문자 배열입니다. 'std :: string' 또한 인접한 문자 배열입니다. SGI STL'rope' 클래스는 확실히 문자열이지만 연속적인 메모리에 있어야한다는 요구 사항은 없습니다. 사실 그것은 모든 요점 : 임의의 위치에서 빠른 삽입 성능을 갖는 것입니다. –