C++/Modern C++(11, 14, 17, 20)
[C++11] User-defined literals
deulee
2023. 8. 25. 15:39
"User-defined literals"은 C++11로부터 도입된 기능으로, 사용자가 직접 정의한 리터럴 표기법을 만들 수 있게 해준다.
리터럴은 코드에서 값을 나타내는 "상수 표기법"을 의미한다. 예를 들어, 정수 리터럴은 `42`, 부동소수점 리터럴은 `3.14`와 같이 말이다.
사용자 정의 리터럴은 이와 비슷한 방식으로 작동하지만, 프로그래머가 정의한 리터럴 표기법을 사용하여 사용자 정의 타입에 대한 리터럴 값을 생성할 수 있다.
우선 다음 예시를 보도록 하자.
#include <iostream>
class Time {
private:
unsigned int minutes;
public:
explicit Time(unsigned int min) : minutes(min) {}
unsigned int getMinutes() const {
return minutes;
}
};
Time operator""_min(unsigned long long minutes) {
return Time(static_cast<unsigned int>(minutes));
}
int main(void)
{
Time t = 530_min;
std::cout << "Time in minutes: " << t.getMinutes() << std::endl;
return 0;
}
위의 예제에서 `operator""_min"은 분 단위의 값을 받아 `Time` 클래스의 객체를 생성하여 반환하는 사용자 정의 리터럴 함수이다. `530_min`과 같은 표기가 가능해지며 이를 통해 `Time` 객체를 리터럴처럼 사용할 수 있게 된다.
이렇게 코드의 가독성을 향상시키고 특정 타입에 대한 리터럴 값을 생성할 때 더 편리한 문법이 제공되는 것이다.