<예제.2>에서 보았듯이 chrono는 다양한 정밀도 타입으로 시간을 표시할 수 있습니다.
그리고 각 시간 정밀도 타입 별로 생성할 때 미리 값을 설정할 수 있습니다.
std::chrono::hours H1(1);
std::chrono::seconds S1(10);
std::chrono::milliseconds MILS1(100);
또한 이 시간 타입을 서로 연산할 수도 있습니다.
std::chrono::hours H1(1);
std::chrono::hours H2(2);
std::chrono::hours H3 = H1 + H2;
물론 다른 시간 타입을 연산할 수도 있습니다
std::chrono::seconds S1(10);
std::chrono::milliseconds MILS1(100);
std::chrono::milliseconds MILS2 = S1 + MILS1;
다른 시간 타입을 연산할 때 주의할 점이 있습니다. 아래처럼
std::chrono::milliseconds MILS2 = S1 + MILS1;
의 경우는 초와 밀리초라는 서로 다른 타입을 더하지만 값을 저장하는 타입이 밀리초이기 때문에 잃어버리는 값이 발생하지 않으므로 연산에 문제가 없습니다.
그러나 아래와 같이
std::chrono:: seconds S2 = S1 + MILS1;
로 하는 경우는 밀리초 부분을 잃어버리게 되기 때문에 컴파일 에러가 발생합니다.
이런 경우는 명시적으로 형 변환을 시켜줘야 합니다.
std::chrono::seconds S2 = std::chrono::duration_cast< std::chrono::seconds >(S1 + MILS1);
< 예제. 3 >
#include <chrono>
#include <iostream>
int main()
{
{
std::chrono::hours H1(1); // 1시간
std::cout << "H1(1) : " << H1.count() << std::endl;
std::chrono::seconds S1(10);
std::chrono::seconds S2(120);
std::cout << "S1(10) : " << S1.count() << std::endl;
std::cout << "S2(120) : " << S2.count() << std::endl;
}
{
std::chrono::hours H1(1);
std::chrono::hours H2(2);
std::chrono::hours H3 = H1 + H2;
std::cout << "H1 + H2 = : " << H3.count() << std::endl;
std::chrono::seconds S1(10);
std::chrono::milliseconds MILS1(100);
std::chrono::milliseconds MILS2 = S1 + MILS1;
std::cout << "S1 + MILS1 = : " << MILS2.count() << std::endl;
std::chrono::seconds S2 = std::chrono::duration_cast< std::chrono::seconds >(S1 + MILS1);
std::cout << "S1 + MILS1 = : " << S2.count() << std::endl;
}
return 0;
}
< 실행 결과 >
'C++0x' 카테고리의 다른 글
[ VC11-C++11 ] range base for - 1 (3) | 2012.08.21 |
---|---|
[ VC11-C++11 ] chrono - clock 클래스 (1) | 2012.08.14 |
[ VC11-C++11 ] chrono - 시간 측정하기 (0) | 2012.07.31 |
[ VC11-C++11 ] enum - 전방선언 (0) | 2012.07.23 |
[ VC11-C++11 ] enum - unscoped enumeration과 scoped enumeration (0) | 2012.07.16 |