私の理解では、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);
}
};