3

我正在关注 Nicolai M. Josuttis 的“The C++ Standard Library (Second Edition)”,第 152-153 页中的一个示例,该示例详细说明了打印std::chrono::system_clockC++ 中引入的时代、当前时间、最小和最大时间的示例11.

我正在使用 Microsoft Visual Studio 2012,并且<xstring>由于无效的空指针而触发了一个断言。这发生在std::string ts = std::ctime( &t )下面的代码行设置后tp = std::chrono::system_clock::time_point::min();

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

这是由于<chrono>图书馆中 Dinkumware 的实施错误,还是只是书中的错字/错误?我一遍又一遍地检查了书中给出的代码,看看我是否将其复制错误,但似乎并非如此。我将非常感谢您提供的任何见解。

4

1 回答 1

1

It looks like std::ctime returns NULL, which indicates an incorrect t value. Probably because the call to asString uses a value of time_point that cannot be represented in time_t type.

于 2013-05-19T10:03:04.160 回答