std::chrono and cout

后端 未结 4 770
伪装坚强ぢ
伪装坚强ぢ 2020-12-10 10:31

I have a stupid problem. I try to switch to the c++11 headers and one of those is chrono. But my problem is that I cant cout the result of time operations. For example:

相关标签:
4条回答
  • 2020-12-10 10:43

    If you want timing in resolution of milliseconds this is how you can do it:

    auto t1 = std::chrono::high_resolution_clock::now();
    //process to be timed
    auto t2 = std::chrono::high_resolution_clock::now();
    std::cout << "process took: "
        << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()
        << " milliseconds\n";
    

    Don't forget to add among the included headers:

    #include <chrono> //timing
    
    0 讨论(0)
  • 2020-12-10 10:47

    Not sure what you expect from this cast, maybe you wanted t.time_since_epoch().count()?

    0 讨论(0)
  • 2020-12-10 10:50

    A quick google search found this page: http://en.cppreference.com/w/cpp/chrono/duration, where you can find an example of printing a duration.

    Edit: it got moved to http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

    0 讨论(0)
  • 2020-12-10 10:59

    As others have noted, you can call the count() member function to get the internal count.

    I wanted to add that I am attempting to add a new header: <chrono_io> to this library. It is documented here. The main advantage of <chrono_io> over just using count() is that the compile-time units are printed out for you. This information is of course obtainable manually, but it is much easier to just have the library to it for you.

    For me, your example:

    #include <iostream>
    #include <chrono_io>
    
    int main()
    {
        auto t = std::chrono::high_resolution_clock::now();
        std::cout << t.time_since_epoch() << '\n';
    }
    

    Outputs:

    147901305796958 nanoseconds
    

    The source code to do this is open source and available at the link above. It consists of two headers: <ratio_io> and <chrono_io>, and 1 source: chrono_io.cpp.

    This code should be considered experimental. It is not standard, and almost certainly will not be standardized as is. Indeed preliminary comments from the LWG indicate that they would prefer the default output to be what this software calls the "short form". This alternative output can be obtained with:

    std::cout << std::chrono::duration_fmt(std::chrono::symbol)
              << t.time_since_epoch() << '\n';
    

    And outputs:

    147901305796958 ns
    
    0 讨论(0)
提交回复
热议问题