我在Nicolai M. Josuttis的“C ++标准库(第二版)”,第152-153页中举了一个例子,其中详细介绍了打印{{{的时代,当前时间,最小和最大时间的示例。 1}}在C ++ 11中引入。
我正在使用Microsoft Visual Studio 2012,并且由于空指针无效而在std::chrono::system_clock
中触发了断言。设置<xstring>
std::string ts = std::ctime( &t )
行上发生这种情况
tp = std::chrono::system_clock::time_point::min();
这是由于Dinkumware在#include <chrono>
#include <ctime>
#include <string>
#include <iostream>
std::string asString( const std::chrono::system_clock::time_point& tp )
{
std::time_t t = std::chrono::system_clock::to_time_t( tp );
std::string ts = std::ctime( &t );
ts.resize( ts.size()-1 );
return ts;
}
int main()
{
std::chrono::system_clock::time_point tp;
std::cout << "epoch: " << asString(tp) << std::endl;
tp = std::chrono::system_clock::now();
std::cout << "now: " << asString(tp) << std::endl;
tp = std::chrono::system_clock::time_point::min();
std::cout << "min: " << asString(tp) << std::endl;
tp = std::chrono::system_clock::time_point::max();
std::cout << "max: " << asString(tp) << std::endl;
return 0;
}
库中的实现错误,还是书中的错字/错误?我一遍又一遍地看过书中给出的代码,看看我是否错误地将其复制出来,但事实并非如此。我非常感谢任何见解。
答案 0 :(得分:1)
看起来std::ctime
返回NULL,表示t
值不正确。可能是因为对asString
的调用使用的值time_point
无法在time_t
类型中表示。