문제

간단한 질문:왜 C++11은 "사용자"(실제로는 표준 라이브러리) 정의 리터럴을 제공하지 않습니까? std::string, 와 같은

auto str = "hello world"s; // str is a std::string

C++와 마찬가지로 Objective-C는 C 스타일 문자열과 보다 사용자 친화적인 라이브러리 유형을 모두 지원합니다. NSString;그러나 C++와는 달리 누구도 둘 사이를 혼동하지 않습니다. NSString 문자열 리터럴 앞에 다음을 추가하여 @.실제로 리터럴이 포함된 Objective-C 코드를 보는 경우는 거의 없습니다. 그렇지 않다 가지고 있다 @ 접두사.다들 그게 그렇게 하는 방법이라는 걸 알고 있어요. NSString 그리고 계속합니다.

C++11 사용자 정의 리터럴은 이를 허용하며 실제로 Stroustrup의 C++11 FAQ의 UDL 섹션에서는 이 예제를 정확하게 사용합니다.또한 선행 밑줄이 없는 UDL은 예약되어 있으므로 일반 문자를 허용하는 데 문제가 없습니다. s 위와 같이 다른 것과 충돌할 가능성이 없습니다.

뭔가 빠졌을 수도 있지만 이것이 언어에 매우 가치 있고 위험이 없는 추가 기능인 것 같습니다. 그런데 C++11이 이를 제공하지 않는 이유를 아는 사람이 있습니까?C++14에 나타날 가능성이 있나요?

도움이 되었습니까?

해결책

사용자 정의 리터럴은 C++11에서 충분히 새롭기 때문에 포함되지 않았지만 C++14(누구나 관심이 있는 경우 §21.7)에 있습니다.그리고 그렇습니다. s 접미사로.정확한 결과 유형은 문자열 리터럴 자체의 유형에 따라 다릅니다. "좁은" 리터럴은 std::string, u16 리터럴은 다음을 제공합니다. u16string, u32 리터럴은 다음을 제공합니다. u32string.아, 그리고 예, 넓은 문자열 리터럴을 사용하려고 하면 wstring.

참고 s 접미사는 초를 의미하는 데에도 사용됩니다( <chrono>) 하지만 둘 사이에는 실질적인 갈등이 없습니다.s 문자열 리터럴에서 문자열을 의미하며, s 숫자는 초를 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top