2013-03-19 3 views

답변

14

"Hello" 리터럴 스트링의 유형은 "6 constchar 배열"이다.

일반 문자열 리터럴 및 UTF-8 문자열 리터럴은 좁은 문자열 리터럴이라고도합니다. 리터럴 좁은 문자열

이것은, 그러나, 배열에 의해 const char*로 전환시킬 수있다 [...] N 문자열의 크기 "Nconst char 배열"입력 갖는다 - 포인터 변환. 배열 - 포인터 변환은 배열의 첫 번째 요소에 대한 포인터를 생성합니다.

+0

이것은 아마도이 코드가이 함수의'C4172 지역 변수의 주소를 반환하거나 임시'를 경고하는 이유를 설명 할 것이다.'const char * const & f() {return "hello"; }'VS2010에서. 이것에 동의하십니까? – Belloc

+1

@ user1042389 배열 - 포인터 변환으로 인해 생성 된 포인터는 임시 개체입니다. 해당 객체에 대한 참조가 반환되므로 참조가 매달려 있습니다. –

+0

임시는 어디에 있습니까? "hello"는 정적 메모리에 존재합니다! – Belloc

4

표준에서는이를 "배열 const char"으로 정의하므로 const char[n] (n은 종료 NUL 바이트 포함) 크기입니다.

제 7 2.14.15을 § 리터럴

좁은 문자열은 아래에서 정의 된 해당 문자열의 크기 "N 개의 CONST 숯의 배열"을 입력 가지며, 정적 저장 기간을 갖는다.