ron*_*nag 15 c++ visual-c++ c++11 c++-chrono visual-studio-2012
我刚刚注意到以下代码<chrono.h>,这对我来说没有意义.
struct system_clock
{
static const bool is_monotonic = false; // retained
static const bool is_steady = false;
};
class steady_clock
: public system_clock
{ // wraps monotonic clock
public:
static const bool is_monotonic = true; // retained
static const bool is_steady = true;
};
typedef steady_clock monotonic_clock; // retained
typedef system_clock high_resolution_clock;
Run Code Online (Sandbox Code Playgroud)
steady_clock当它简单地从system_clock哪个不稳定时,怎么能稳定?
ild*_*arn 11
忽略你所示的代码(杰里的回答已经解决了,比我能够更好地),大概是VC++ 2012的std::steady_clock是没有稳定,就证明了多个bug报告目前开放的MS连接对此非常问题:
Jer*_*fin 10
暂时忽略微软实施中的错误,从一个不稳定的时钟(或一个非单调的时钟)得到一个稳定的时钟,一般来说非常有意义.
这是典型的"is-a"术语阻碍的地方之一,你需要真正考虑替代.特别是,情况不是"稳定的时钟不是一个不稳定的时钟,所以推导是错误的." 相反,情况是"在任何情况下都可以用稳定的时钟代替不稳定的时钟,因此推导很好"(同样适用于is_monotonic).
让我们考虑一个极端的例子 - 将原子钟直接连接到您的计算机.它是单调的,并且和你希望得到的一样稳定.假设其输出频率(/分辨率)足够高,您可以使用它代替系统可能具有的任何/所有其他时钟.
Yon*_* Wu 10
我实际上不同意"接受的答案".这在微软方面完全是错误的,并且可能导致不切实际的期望.在C++ 11标准要求system_clock实施to_time_t和from_time_t,但也有没有这样的要求steady_clock和high_resolution_clock.它不是"is-a"关系,因为steady_clock没有实现所有必需的接口system_clock; 也不应该.微软的行动对我来说没有意义:你如何在避免时间偏差问题的同时期待一个人的steady_clock行为to_time_t?
所以,简单地说,微软犯了一个错误,他们修复它的速度很慢.根据Stephan T. Lavavej的说法,他"没有时间在2013 RTM中解决这个问题",并且"所有时钟都需要重新实现,因为有几个活动错误需要跟踪".请参阅https://connect.microsoft.com/VisualStudio/feedback/details/719443/.
我想这不是他在一开始写的垃圾假实现.
编辑:我有点惊讶,我被投票,甚至有点不高兴.我的贬低者和分歧者,你是否意识到你正在合理化一个破碎的实施,这可能会很快改变和修复?给我一个真实的实现,它steady_clock继承system_clock而且没有被破坏....
2014年7月事实更新:从Visual Studio 2014 CTP2开始,steady_clock不再继承system_clock....
| 归档时间: |
|
| 查看次数: |
3299 次 |
| 最近记录: |