std::chrono:: duration_cast
|
헤더 파일에 정의됨
<chrono>
|
||
|
template
<
class
ToDuration,
class
Rep,
class
Period
>
constexpr ToDuration duration_cast ( const std:: chrono :: duration < Rep, Period > & d ) ; |
(C++11부터) | |
std::chrono::duration
을 다른 타입
ToDuration
의 duration으로 변환합니다.
이 함수는 오버로드 해결에 참여하는 조건은
ToDuration
이
std::chrono::duration
의 특수화(specialization)인 경우에만 해당됩니다.
다음을 가정합니다
-
ToRep를 typename ToDuration :: rep 로 정의하고, -
ToPeriod를 typename ToDuration :: period 로 정의하고, -
CF를 std:: ratio_divide < Period, ToPeriod > 로 정의하고, -
CR를 std:: common_type < Rep, ToRep, std:: intmax_t > :: type 로 정의하고, - cr_count 를 static_cast < CR > ( d. count ( ) ) 로 정의하고,
- cr_num 를 static_cast < CR > ( CF :: num ) 로 정의하고,
- cr_den 를 static_cast < CR > ( CF :: den ) 로 정의한다.
결과는:
| CF :: num | |||
|---|---|---|---|
| 1 | 아님 1 | ||
| CF :: den | 1 |
ToDuration
(
static_cast
<
ToRep
>
( d. count ( ) ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num ) ) |
| 아님 1 |
ToDuration
(
static_cast
<
ToRep
>
( cr_count / cr_den ) ) |
ToDuration
(
static_cast
<
ToRep
>
( cr_count * cr_num / cr_den ) ) |
|
목차 |
매개변수
| d | - | 변환할 지속 시간 |
반환값
d
를
ToDuration
타입의 지속 시간으로 변환합니다.
참고 사항
암시적 변환은 사용되지 않습니다. 컴파일 타임에 하나 이상의 매개변수가 1 인 것으로 알려진 경우 가능한 곳에서는 곱셈과 나눗셈을 피합니다. 계산은 사용 가능한 가장 넓은 타입으로 수행되며, 작업이 완료된 후에만 static_cast 를 사용한 것처럼 결과 타입으로 변환됩니다.
소스 주기가 대상 주기로 정확히 나누어떨어지는 정수 기간 간의 변환(예: 시간에서 분으로) 또는 부동소수점 기간 간의 변환은 일반 캐스트 또는
std::chrono::duration
생성자
를 통해 암시적으로 수행할 수 있으며,
duration_cast
는 필요하지 않습니다.
부동 소수점 지속 시간을 정수 지속 시간으로 캐스팅하는 것은 정의되지 않은 동작을 유발합니다 부동 소수점 값이 NaN, 무한대이거나 대상 정수 타입으로 표현하기에 너무 큰 경우에. 그 외의 경우, 정수 지속 시간으로의 캐스팅은 다른 static_cast 에서와 마찬가지로 정수 타입으로의 절삭 변환을 따릅니다.
예제
이 예제는 함수의 실행 시간을 측정합니다.
#include <chrono> #include <iostream> #include <ratio> #include <thread> void f() { std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { const auto t1 = std::chrono::high_resolution_clock::now(); f(); const auto t2 = std::chrono::high_resolution_clock::now(); // floating-point duration: no duration_cast needed const std::chrono::duration<double, std::milli> fp_ms = t2 - t1; // integral duration: requires duration_cast const auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1); // converting integral duration to integral duration of // shorter divisible time unit: no duration_cast needed const std::chrono::duration<long, std::micro> int_usec = int_ms; std::cout << "f() took " << fp_ms << ", or " << int_ms << " (whole milliseconds), or " << int_usec << " (whole microseconds)\n"; }
가능한 출력:
f() took 1000.14ms, or 1000ms (whole milliseconds), or 1000000us (whole microseconds)
참고 항목
|
(C++11)
|
시간 간격
(클래스 템플릿) |
|
(C++11)
|
동일한 클록에서 다른 지속 시간을 가진 시간 포인트로 변환
(함수 템플릿) |
|
(C++17)
|
지속 시간을 다른 지속 시간으로 변환 (내림)
(함수 템플릿) |
|
(C++17)
|
지속 시간을 다른 지속 시간으로 변환 (올림)
(함수 템플릿) |
|
(C++17)
|
지속 시간을 다른 지속 시간으로 변환 (가장 가까운 값으로 반올림, 동점 시 짝수로)
(함수 템플릿) |