如何将持续时间添加到time_point?

时间:2017-12-16 15:15:11

标签: c++ chrono

我试过这样的事情:

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秒呢?

1 个答案:

答案 0 :(得分:4)

问题可能是因为ctime存储了一些静态存储,只是将指针返回给你。

所以它用另一个结果覆盖一个结果并打印2次。 操作顺序不是由标准确定的,所以它的作用是什么:

  1. 使用一个参数调用ctime,这会将表示保存在内部缓冲区中并返回指向它的指针。
  2. 使用另一个参数调用ctime,该参数将表示保存在同一个内部缓冲区中并返回指向它的指针。
  3. 从两个char *(实际上是相同的指针)
  4. 打印值

    解决方案是通过将操作除以;

    来强制进行评估

    代码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;
    }