최근에 몇 가지 필요한 최적화를 수행했습니다. 내가하고있는 한 가지는 ostringstreams-> sprintfs를 변경하는 것입니다. 나는 std :: strings를 ac 스타일 배열에 sprintf'ing하고있다.
char foo[500];
sprintf(foo, "%s+%s", str1.c_str(), str2.c_str());
Microsoft의 std :: string :: c_str () 구현은 일정한 시간에 실행됩니다 (내부 포인터 만 반환합니다). libstdc ++는 동일한 작업을 수행하는 것으로 보입니다 . std가 c_str을 보장하지는 않지만 이것을 수행하는 다른 방법을 상상하기는 어렵다는 것을 알고 있습니다. 예를 들어 메모리에 복사 한 경우 버퍼에 메모리를 할당하거나 (STL 계약의 일부가 아닌 파기하기 위해 호출자에게 맡김) 내부 정적에 복사해야하는 경우 버퍼 (아마 스레드 안전하지 않으며 수명에 대한 보장이 없습니다). 따라서 내부적으로 유지 관리되는 null 종료 문자열에 대한 포인터를 반환하는 것이 유일한 현실적인 해결책 인 것 같습니다.
c_str
CONST 방법 (또는 적어도 CONST 과부하를 갖는다 - I 어느 잊어)이 이렇게하는 이유 일 수 있고, 논리 값을 변경하지 않는다mutable
. 그것은 것 에서 포인터 휴식 다른 호출을c_str
, 그러한 포인터가 동일한 논리 문자열을 참조해야한다는 점을 제외하고 (그래서 재 할당 할 새로운 이유가 없다 - 이미 널 터미네이터가 있어야합니다) 또는 이미 다른 비에 대한 호출이되어 있어야합니다 -const 메소드 사이.