std::chrono:: duration
|
헤더에 정의됨
<chrono>
|
||
|
template
<
class
Rep,
|
(C++11 이후) | |
클래스 템플릿
std::chrono::duration
는 시간 간격을 나타냅니다.
이는
Rep
타입의 틱 카운트와 틱 주기로 구성되며, 틱 주기는 컴파일 시간 유리수
fraction
으로, 한 틱에서 다음 틱까지의 시간(초)을 나타냅니다.
duration
에 저장되는 유일한 데이터는
Rep
타입의 틱 카운트입니다.
Rep
가 부동 소수점인 경우,
duration
은 틱의 분수도 표현할 수 있습니다.
Period
는 duration 타입의 일부로 포함되며, 서로 다른 duration 간 변환 시에만 사용됩니다.
목차 |
멤버 타입
| 멤버 타입 | 정의 |
rep
|
Rep
, 산술 타입 또는 산술 타입을 에뮬레이트하는 클래스로, 틱의 수를 나타냄
|
period
|
Period
(C++17까지)
typename
Period
::
type
(C++17부터)
,
std::ratio
를 나타내며, 틱 주기를 표현함 (즉, 틱 당 초의 분수 값)
|
멤버 함수
|
새로운 duration을 생성
(public member function) |
|
|
내용을 할당
(public member function) |
|
|
틱 카운트를 반환
(public member function) |
|
|
[static]
|
특수 duration 값 zero를 반환
(public static member function) |
|
[static]
|
특수 duration 값 min을 반환
(public static member function) |
|
[static]
|
특수 duration 값 max를 반환
(public static member function) |
|
단항 +와 단항 -를 구현
(public member function) |
|
|
틱 카운트를 증가 또는 감소
(public member function) |
|
|
두 duration 간의 복합 할당을 구현
(public member function) |
비멤버 함수
|
duration을 인자로 하는 산술 연산 구현
(함수 템플릿) |
|
|
(C++11)
(C++11)
(C++20에서 제거됨)
(C++11)
(C++11)
(C++11)
(C++11)
(C++20)
|
두 duration 비교
(함수 템플릿) |
|
(C++11)
|
duration을 다른 틱 간격을 가진 duration으로 변환
(함수 템플릿) |
|
(C++17)
|
duration을 다른 duration으로 변환 (내림)
(함수 템플릿) |
|
(C++17)
|
duration을 다른 duration으로 변환 (올림)
(함수 템플릿) |
|
(C++17)
|
duration을 다른 duration으로 변환 (가장 가까운 값으로 반올림, 동점시 짝수로)
(함수 템플릿) |
|
(C++17)
|
duration의 절대값 구하기
(함수 템플릿) |
|
(C++20)
|
duration
에 대한 스트림 출력 수행
(함수 템플릿) |
|
(C++20)
|
지정된 형식에 따라 스트림에서
duration
파싱
(함수 템플릿) |
헬퍼 타입
아래 표에서 사용되는 /* intXX */ 타입은 최소 XX 비트를 갖는 부호 있는 정수 타입을 의미합니다.
| 유형 | 정의 |
std::chrono::nanoseconds
|
std :: chrono :: duration < /* int64 */ , std:: nano > |
std::chrono::microseconds
|
std :: chrono :: duration < /* int55 */ , std:: micro > |
std::chrono::milliseconds
|
std :: chrono :: duration < /* int45 */ , std:: milli > |
std::chrono::seconds
|
std :: chrono :: duration < /* int35 */ > |
std::chrono::minutes
|
std :: chrono :: duration < /* int29 */ , std:: ratio < 60 >> |
std::chrono::hours
|
std :: chrono :: duration < /* int23 */ , std:: ratio < 3600 >> |
std::chrono::days
(C++20부터)
|
std :: chrono :: duration < /* int25 */ , std:: ratio < 86400 >> |
std::chrono::weeks
(C++20부터)
|
std :: chrono :: duration < /* int22 */ , std:: ratio < 604800 >> |
std::chrono::months
(C++20부터)
|
std :: chrono :: duration < /* int20 */ , std:: ratio < 2629746 >> |
std::chrono::years
(C++20부터)
|
std :: chrono :: duration < /* int17 */ , std:: ratio < 31556952 >> |
참고:
hours
까지의 미리 정의된 duration 타입 각각은
최소 ±292년 범위를 커버합니다.
|
미리 정의된 각 duration 타입
|
(C++20부터) |
헬퍼 클래스
|
std::common_type
특수화
(클래스 템플릿 특수화) |
|
|
(C++11)
|
duration이 다른 틱 주기를 가진 duration으로 변환 가능함을 나타냄
(클래스 템플릿) |
|
(C++11)
|
주어진 타입의 틱 카운트에 대한 zero, min, max 값 생성
(클래스 템플릿) |
duration
에 대한 포맷팅 지원
(클래스 템플릿 특수화) |
|
|
std::chrono::duration
에 대한 해시 지원
(클래스 템플릿 특수화) |
헬퍼 특수화
|
template
<
class
Rep,
class
Period
>
constexpr
bool
enable_nonlocking_formatter_optimization
<
chrono
::
duration
<
Rep, Period
>>
|
(C++23부터) | |
이 특수화는
std::enable_nonlocking_formatter_optimization
가
std::print
와
std::println
의 효율적인 구현을 가능하게 하여, 템플릿 매개변수
Rep
가 이를 허용할 때
chrono::duration
객체의 출력을 지원합니다.
리터럴
|
인라인 네임스페이스
std::literals::chrono_literals
에 정의됨
|
|
|
(C++14)
|
시간을 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
분을 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
밀리초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
마이크로초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
(C++14)
|
나노초를 나타내는
std::chrono::duration
리터럴
(함수) |
|
참고: 리터럴 접미사
|
(C++20부터) |
참고 사항
duration 객체
d
가 보유하는 실제 시간 간격(초 단위)은 대략적으로
d.
count
(
)
*
D
::
period
::
num
/
D
::
period
::
den
와 같습니다. 여기서
D
는
chrono::duration<>
타입이며,
d
는 해당 타입의 객체입니다.
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_chrono_udls
|
201304L
|
(C++14) | 시간 타입에 대한 사용자 정의 리터럴 |
예제
이 예제는 여러 사용자 정의 duration 타입을 정의하고 타입 간 변환하는 방법을 보여줍니다:
#include <chrono> #include <iostream> using namespace std::chrono_literals; template<typename T1, typename T2> using mul = std::ratio_multiply<T1, T2>; int main() { using microfortnights = std::chrono::duration<float, mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>; using nanocenturies = std::chrono::duration<float, mul<mul<std::hecto, std::chrono::years::period>, std::nano>>; using fps_24 = std::chrono::duration<double, std::ratio<1, 24>>; std::cout << "1 second is:\n"; // 정수 스케일 변환 (정밀도 손실 없음): 캐스트 불필요 std::cout << std::chrono::milliseconds(1s).count() << " milliseconds\n" << std::chrono::microseconds(1s).count() << " microseconds\n" << std::chrono::nanoseconds(1s).count() << " nanoseconds\n"; // 정수 스케일 변환 (정밀도 손실): 캐스트 필요 std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " minutes\n"; // duration_cast 대안: std::cout << 1s / 1min << " minutes\n"; // 부동소수점 스케일 변환: 캐스트 불필요 std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " nanocenturies\n" << fps_24(1s).count() << " frames at 24fps\n"; }
출력:
1 second is: 1000 milliseconds 1000000 microseconds 1000000000 nanoseconds 0 minutes 0 minutes 0.82672 microfortnights 0.316887 nanocenturies 24 frames at 24fps