次のプログラムを検討してください:LWS
#include <iostream>
#include <chrono>
void test()
{
static const std::chrono::high_resolution_clock::time_point marker
= std::chrono::high_resolution_clock::now();
std::cout<<marker.time_since_epoch().count()<<std::endl;
}
int main(int argc, char* argv[])
{
std::cout<<std::chrono::high_resolution_clock::now()
.time_since_epoch().count()<<std::endl;
std::cout<<"--------"<<std::endl;
test();
std::cout<<"--------"<<std::endl;
test();
return 0;
}
g ++を使用すると、結果は次のようになります。
1363389335665993
--------
1363389335666701
--------
1363389335666701
つまり、関数marker
内の静的定数test()
は、この関数の最初の呼び出し中に評価されます。プログラムの開始時にmarker
評価を強制する方法またはトリック(グローバル変数として宣言することを除く)はありますか?marker