2017-12-20 15 views
4

일반적으로 const char*을 반환하려면 호출자에게 출력 메모리 버퍼를 제공해야하며 해당 버퍼의 크기를 조정할 수 없으므로 함수에서 std::string을 반환합니다.C++에서 문자열 리터럴에서 const char *를 반환 하시겠습니까?

그러나 const char*이 문자열 리터럴 인 경우 유효합니까? (유효한 경우) 가능성이 더 빨리 내가 ​​동적으로 std::string를 구성하는 메모리를 할당 할 필요가 없습니다 것 같은 것 이런 식으로 이렇게

const char* generate_c_string() { 
    return "ABC"; 
} 

.

const char* x = "ABC";이 유효하기 때문에 유효 할 수 있습니다. C++ 표준의 유효성을 입증하는 참조가 있습니까? string literals에 대한

+0

포인터를 반환 할 때 호출자가 버퍼를 제공해야하는 이유를 이해할 수 없습니다. –

+0

중복으로 투표하기로 결정 했음에도 불구하고 둘 다 여전히 유용하기 때문에 질문과 대답을 모두 취소했습니다. – Tas

+2

이렇게 짧은 문자열의 경우 가장 일반적인 std :: string 구현은 동적 메모리를 할당하지 않습니다. [std :: string의 문맥에서 약어 SSO의 의미] (https://stackoverflow.com/questions/10315041/meaning-of-acronym-soso-in-the-context-of-stdstring) –

답변

6

이 유효,

문자열 리터럴은 static storage duration을 가지고, 따라서 프로그램의 수명 메모리에 존재한다.

반환 된 포인터는 프로그램 수명 기간 동안 유효합니다.

+2

동적 라이브러리에서 가져온 'generate_c_string'과 같은 경계선 시나리오가 나중에 언로드됩니까? – VTT

+1

@VTT 질문의 가치가있는 것 같습니다. –