<개요> 리터럴의 5가지 주요 자료형은 정수, 문자, 부동 소수점, 문자열, 포인터 및 부울형 입니다. C++11 부터 이러한 범주에 따라 사용자 고유의 리터럴을 정의하여 일반적인 구문에 대한 바로가기를 정의하고 안전성을 높힐 수 있습니다. |
예를 들어 Distance 라는 클래스가 있다고 합시다. 킬로미터와 마일에 대한 리터럴을 하나씩 정의하고 간단히 auto = 42.0km 또는 auto = 42.0mi을 작성하여 사용자가 측정 단위를 명시할 수 있습니다. 사용자 정의 리터럴에 대한 성능의 이점이나 단점은 없습니다. 주로 편의상 또는 컴파일 시간 형식 추론을 위해 사용됩니다.
사용자 정의 리터럴을 구현하시려면 ""연산자와 범주에 속하는 인자를 가지고 해야합니다.
연산자 이름은 제공하는 이름에 대한 순서이지만 (_a, _b, _c 같은) 선행밑줄은 꼭 필요합니다 ( _a 에서 _는 꼭 써야합니다 ! ) _가 없는 리터럴은 표준 라이브러리 리터럴 뿐입니다. 연산자 내에서 추가작업을 할 수도 있고, constexpr 로 선언할 수도 있습니다. 소스 코드에서 사용자 정의 여부에 관계없이 모든 리터럴은 본질적으로 101, 54.7, "hello" 또는 true와 같은 영숫자 문자의 시퀀스입니다. 컴파일러가 리터럴 값으로 할당 한 모든 형식을 입력으로 허용 하는 사용자 정의 리터럴을 비공식적으로 가공된 리터럴이라고 합니다. _r 및 _t를 제외한 위의 모든 연산자는 가공된 리터럴입니다. 예를 들어 리터럴 42.0_km는 _b와 유사한 서명을 가진 _km이라는 연산자에 바인딩하고 리터럴 42_km은 _a와 유사한 서명을 가진 연산자에 바인딩합니다. 다음 예제에서는 사용자 정의 리터럴을 통해 호출자에게 명시적으로 입력을 지정하도록 장려하는 방법을 보여 줍니다. Distance를 생성하려면 사용자가 적절한 사용자 정의 리터럴을 사용하여 킬로미터 또는 마일을 명시적으로 지정해야 합니다. 물론 다른 방법으로 동일한 결과를 얻을 수도 있지만 사용자 정의 리터럴이 대체 방법보다 더 간단합니다.
리터럴 숫자는 10진수를 사용해야 합니다. 그렇지 않으면 숫자가 정수로 해석되며 형식이 연산자와 호환되지 않습니다. 부동소수점, 정수형은 long long ~ 여야 합니다!
내가 만든 간단한 복소수의 예 링크 : https://docs.microsoft.com/ko-kr/cpp/cpp/user-defined-literals-cpp?view=vs-2017 |
'C++ > Modern' 카테고리의 다른 글
C++11) 스마트 포인터 ( auto_ptr, unique_ptr, shared_ptr, weak_ptr) (2) | 2019.02.15 |
---|---|
C++11) std::reference_wrapper (0) | 2019.02.14 |
C++11) extern template (0) | 2019.02.13 |
C++11) std::tuple (0) | 2019.02.10 |
C++11) std::thread 와 관련된 함수, 라이브러리 2 (0) | 2019.02.08 |