我的理解是,C++ 允许任何不是 IO 或外部函数调用的东西都可以优化重新排序。这开始让我编写 RAII 样式函数时间戳的努力受挫。
编辑
这是一个自包含的示例,
VS 2012 的代码,经过优化
#include <chrono>
#include <iostream>
#include <atomic>
#include <string>
using namespace std;
class TimeSlice
{
public:
TimeSlice(std::string myname): name(myname), start(timestamp())
{
fency();//don't optomize me out!
}
~TimeSlice()
{
fency();
auto elapsed = timestamp()-start;
cout << name<<(int) elapsed << endl;
}
static inline long long timestamp()
{
return chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
}
private:
const long long start;
const std::string name;
static inline void fency()
{
std::atomic_signal_fence(std::memory_order_seq_cst);
}
};