如何将持续时间添加到 time_point?
How to add duration to 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
我在这里做错了什么?现在怎么加十秒?
问题可能是因为 ctime
将结果存储在一些静态存储中,并且只是 returns 指向您的指针。
所以它用另一个结果覆盖一个结果并打印2次。
标准不固定操作顺序,所以它的作用是:
- 使用一个参数调用
ctime
,这会在内部缓冲区中保存表示并 returns 指向它的指针。
- 使用另一个参数调用
ctime
,这会将表示保存在相同的内部缓冲区中,并 returns 指向它的指针。
- 打印两个 char* 的值(实际上是同一个指针)
解决方案是通过将操作划分为 ;
来强制计算顺序
的代码
#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;
}
我试过这样的事情:
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
将结果存储在一些静态存储中,并且只是 returns 指向您的指针。
所以它用另一个结果覆盖一个结果并打印2次。 标准不固定操作顺序,所以它的作用是:
- 使用一个参数调用
ctime
,这会在内部缓冲区中保存表示并 returns 指向它的指针。 - 使用另一个参数调用
ctime
,这会将表示保存在相同的内部缓冲区中,并 returns 指向它的指针。 - 打印两个 char* 的值(实际上是同一个指针)
解决方案是通过将操作划分为 ;
#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;
}