2011-07-06 5 views
5

const char*에서 std::string를 구성 할 때, 나는 종종 다음과 같은 패턴을 사용 : 내가 유사한 패턴을 사용할 수 있습니다 가정적절한 관용구

const char* p = GetString(); 
std::string s(p); 

:

const char* p = GetString(); 
std::string s = p; 

을하지만, 구성하지 말고 const char*std::string에 할당하려면 다음과 같이 선택해야합니다.

위의 선택 사항이 더 비슷합니까? 어느 쪽을 선호해야하며, 그 이유는 무엇입니까?

답변

8

가독성을 높이기 위해 변경 표식으로 operator=을 사용하십시오. 또한 const char*에서 std::string을 직접 생성하십시오.

std::string s(GetString()); 
s = GetString(); 
+3

선호 s = GetString(); 우연한 함수를 제공 할 가능성은 없습니다 (Most Vexing Parse - http://en.wikipedia.org/wiki/Most_vexing_parse) – dascandy

1

첫 번째 두 개는 기본적으로 같은 것입니다. assign에는 재미있는 일을 할 수있는 몇 가지 오버로드가 있습니다. 분명하기 때문에 나는 직접적으로 =을 선택할 것이다.

마지막 항목은 매우 장황하고 직관적이지 않은 것처럼 보입니다. 나는 왜 당신이 그것을 할 것인지 확신하지 못한다. (s이 사용하는 메모리를 되찾기를 절박하지 않았다면).

2

연산자 = 및 .assign은 거의 동일하므로 더 쉽게 읽을 수있는 연산자 = 형식을 선호해야합니다.

마지막 사항은 동일하지 않습니다. 내용을 교환하면 지정된 객체를 복사하는 데 소요되는 시간이 줄어들어 내용을 이동시킬뿐입니다. 구문은 먼저 p를 std :: string으로 복사 한 다음 s로 바꾸고 나머지는 p를 복제하면서 더 이상 수행하지 않습니다. P가 어쨌든 파괴하고있는 다른 곳의 std :: string이라면, 이것은 더 빠를 것입니다.

3

일반적으로, 당신은 단지

std::string s = GetString();

을 할 것입니다.

지정을

s = GetString();

을한다.

즉, std::string 개체는 가장 빠른 작업을 수행하는 데 사용할 수있는 최대 정보가 있습니다.