2017-12-16 1 views
3

나는이 같은 시도 :time_point에 기간을 추가하는 방법은 무엇입니까?

using clock = std::chrono::system_clock; 
clock::time_point nowp = clock::now(); 
clock::time_point end = nowp + std::chrono::seconds(10); 
time_t nowt = clock::to_time_t (nowp); 
time_t endt = clock::to_time_t (end); 
std::cerr << " " << ctime(&nowt) << " " << ctime(&endt) << std::endl; 

을하지만 인쇄 :

Sat Dec 16 15:06:43 2017 
Sat Dec 16 15:06:43 2017 

내가 잘못 여기서 뭐하는 거지? 이제 10 초를 어떻게 추가합니까?

+0

, 코드 작동 :'Sat Dec 16 16:26:27 2017 Sat Dec 16 16:26:37 2017' – Vorac

+0

[Howard Hinnant의 시간 기록 라이브러리] (https://github.com/HowardHinnant/date)를 참조하십시오. 더 쉬운 방법 크로노 개체를 인쇄하십시오. –

답변

4

ctime 스토어에 결과가 일부 정적 저장소에 저장되어 포인터 만 반환되기 때문에 문제가 발생한 것일 수 있습니다.

따라서 하나의 결과를 다른 것으로 덮어 쓰고 2 번 인쇄합니다. 내부 버퍼에 표현을 저장하고 그것에 대한 포인터를 반환 하나 개의 인수와

  1. 전화 ctime : 작업의 주문은이하는 그래서 어떤 표준에 의해 고정되어 있지 않습니다.
  2. 또 다른 인수를 사용하여 ctime을 호출하면 동일한 내부 버퍼에 표현을 저장하고 포인터를 반환합니다. 발
  3. 인쇄 값 숯 *의 (실제로 동일한 포인터) 모두

해결 ;

코드로 나누는 연산에 의해 평가하는 순서로 강제 것과 나를 위해 fixes problem for me

#include <iostream> 
#include <chrono> 
using namespace std; 


int main() { 
    using clock = std::chrono::system_clock; 
    clock::time_point nowp = clock::now(); 
    clock::time_point end = nowp + std::chrono::seconds(10); 
    time_t nowt = clock::to_time_t (nowp); 
    time_t endt = clock::to_time_t (end); 
    std::cout << " " << ctime(&nowt) << "\n"; 
    std::cout << ctime(&endt) << std::endl; 
    return 0; 
} 
관련 문제