如何在C ++中打印if(height=== 1080 && width=== 1920){
// your code
}
?
high_resolution_clock
将上述结果构建在:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock high_resolution_clock;
int main()
{
std::cout << high_resolution_clock::now() << std::endl;
}
和
/home/greg/repositories/firstProject/main.cpp:27: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000000l> > >}’)
std::cout << high_resolution_clock::now() << std::endl;
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在阅读this answer之后,我试图迭代&#34;容器&#34;:
/home/greg/repositories/firstProject/main.cpp:27: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
std::cout << high_resolution_clock::now() << std::endl;
^
然而,这导致更多错误。我还尝试使用#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock high_resolution_clock;
int main()
{
for(auto i: high_resolution_clock::now()){
std::cout << i << std::endl;
}
}
并将printf
投射到high_resolution_clock::now()
但没有成功。
更新
尝试另一个答案suggested here也产生了更多错误:
long long
答案 0 :(得分:7)
我非常感谢Passer By's answer中的推荐,但我担心它不太正确。 My date library为system_clock
提供I / O,但不为high_resolution_clock
提供I / O.但是Passer By's code恰好与gcc一起使用,因为该工具集high_resolution_clock
是system_clock
的类型别名。
我正在使用clang,并且使用此工具集high_resolution_clock
是steady_clock
的类型别名(并且在Visual Studio上同上)。在这些平台上Passer By's code将导致编译时错误,该错误导致找不到operator<<
。
要理解为什么会这样,了解system_clock
和steady_clock
之间的区别非常重要:
system_clock
就像一块手表(在智能手机接管地球之前你手腕上的东西)。它可以告诉你一天中的时间。而且因为没有时钟保持完美的时间,它有时会询问另一个时钟的时间,并对其自身进行微小的调整以保持准确。
steady_clock
就像秒表。这对于在跑道上计时跑步者或计时功能非常有用。它从不调整自己,但努力尽可能每秒标记一秒钟。但它不知道一天中的时间,甚至一年中的哪一天。
high_resolution_clock
也与任何人类日历或时间系统无关,并且可以typedef
为system_clock
或steady_clock
。在实践中,它始终是这些时钟之一的typedef
。既然您知道system_clock
和steady_clock
是什么,只需使用其中之一,您的代码就会更便携。
My library为system_clock
提供I / O,因为其主要目的是将<chrono>
扩展到日历领域。
您可以使用my library来流式传输chrono::duration
。因此,如果您真的想要,可以从duration
中获取high_resolution_clock
并传输:{/ p>
#include <iostream>
#include <chrono>
#include "date.h"
typedef std::chrono::high_resolution_clock high_resolution_clock;
using date::operator<<;
int main()
{
std::cout << high_resolution_clock::now().time_since_epoch() << std::endl;
}
这只是我的输出:
2553634286064557ns
在我的平台上,这意味着我的计算机已启动大约那么多纳秒。或者如果您更喜欢更具可读性的东西:
std::cout << date::format("%T\n", high_resolution_clock::now().time_since_epoch());
只输出:
709:32:51.552928058
我的电脑已启动约709小时32分钟。
对于<chrono>
的视频教程,其中包括system_clock
和steady_clock
之间的区别,以及更多内容,请参阅:
答案 1 :(得分:2)
使用Howard Hinnant的date library,这是为了标准化而提出的。
#include <iostream>
#include <chrono>
#include "date.h"
typedef std::chrono::high_resolution_clock high_resolution_clock;
using date::operator<<;
int main()
{
std::cout << high_resolution_clock::now() << std::endl; // works!!
}
有趣的事实:Howard Hinnant是chrono
的作者之一,并认为他们不能直接输出监督/缺陷
编辑:输出high_resolution_clock::time_point
无法移动,请查看Howard's answer了解详情
答案 2 :(得分:1)
并非所有内容都可以直接与cout
一起使用。
查看cplusplus.com上this page的示例
简化版如下
// high_resolution_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
int main()
{
using namespace std::chrono;
auto t1 = high_resolution_clock::now();
//Do sth Here
auto t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
std::cout << "It took me " << time_span.count() << " seconds.";
std::cout << std::endl;
return 0;
}
我认为这可以解决您的问题。