如何将持续时间添加到time_point

How to add duration to time_point?

本文关键字:time point 添加 持续时间      更新时间:2023-10-16

我尝试了这样的事情:

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

我在这里做错了什么?如何将十秒钟添加到现在?

问题可能是因为ctime存储会导致一些静态存储,并且只返回指针。

因此,它用另一个结果覆盖一个结果,并将其打印2次。操作顺序不是由标准固定的,因此它的作用:

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

解决方案是通过将操作与;

分开来强制评估顺序

为我解决问题的代码

#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;
}