[C++] 사용자 정의 리터럴
C++11부터 리터럴표현을 추가해주는 기능이 생겼다.
float를 리터럴로 표현할때 6.43f라고 f를 붙이거나
std::string 리터럴을 표현할때 "ㅇㅇ"s라고 s를 붙이는 것이 리터럴 표현이다.
이 s나 f같은 것들을 임의로 등록할 수 있다는 것이다.
리터럴을 정의하는 방법은 연산자오버로딩과 유사하다.
반환타입 operator "" _리터럴이름(파라미터)
{
ㅤreturn ...
}
여기서 ""은 관용적인 거다. 문자열에만 사용할 수 있는 건 아니다.
그리고 리터럴이름은 _로 시작해야 한다. 오직 표준 라이브러리만이 _를 뗄 수 있는 특혜를 가진다.
int에 대한 래퍼타입을 만들고 그에 대한 리터럴을 추가하려면 이렇게 할 수 있다.


실수는 이렇게 할수 있다. 별차이는 없다.


그런데 문자열은 조금 다르다.
두개의 파라미터를 갖는데, 하나는 문자열의 포인터를 받지만 하나는 문자열의 길이를 또 받는다.

이렇게.
이제 이것들을 응용하면 더 풍부한 리터럴 표현이 가능할 것이다.
하지만 문제는 이게 그리 권장되는 기능은 아니라는 것이다. 혼동이 발생하기 쉽기 때문인지, 대다수의 코딩 지침서들에서는 사용자 정의 리터럴을 구현하지 말 것을 권고하고 있다.
그냥 이런것이 있구나 하고, 알아두는정도면 괜찮겠다.