상세 컨텐츠

본문 제목

[C++11] User-defined literals

C++/Modern C++(11, 14, 17, 20)

by 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` 객체를 리터럴처럼 사용할 수 있게 된다.

 

이렇게 코드의 가독성을 향상시키고 특정 타입에 대한 리터럴 값을 생성할 때 더 편리한 문법이 제공되는 것이다.

'C++ > Modern C++(11, 14, 17, 20)' 카테고리의 다른 글

[C++11] constexpr  (0) 2023.08.25
[C++11] Delegating Constructors  (0) 2023.08.25
[C++11] Explicit virtual overrides  (0) 2023.08.25
[C++11] Final specifier  (0) 2023.08.24
[C++11] Default functions  (1) 2023.08.24

관련글 더보기