# 日報(2024-03-11) C++ で関数やブロックの経過時間を測定する
# 前回のおさらい
前回、go の関数に入って抜けるまでの経過時間を測定する eraps (opens new window) を紹介しました。l じゃなくて r なところがなんとも coquet でオサレですね
# C++ の場合
go は defer() が使えるのでこういう事が簡単にできるのですが、defer() がない C++ だとどうするのか?というと C++ っぽく RAII でやるのが簡単で
- コンストラクタで現在時刻を取得
- デストラクタで経過時間を計算して表示
するクラスを作って関数なりブロックなりの入り口でそのクラスの自動変数を定義しておけば、関数なりブロックなりに入ったところでコンストラクタが呼ばれて、抜けるときにデストラクタが呼ばれるので経過時間が測定できます。ようするにデストラクタを defer() 代わりにするわけですね
# elapse
で、またもや手前味噌ですが elapse (opens new window) というプロジェクトに用意してありますのでどこでもいいので適当なところに clone しておくと
#include "elapse.h"
int kerokero(){
// Show elapsed time of this FUNC with prefix message.
ELAPSE elapse(__func__);
みたいに "elapse.h" をインクルードして関数の入り口で ELAPSE elapse(__func__);
って定義して、elapse を clone したパスを -I オプションに加えて build して実行すると
kerokerokero : 142 ns
みたいに経過時間を表示してくれます。便利
常にコレを使うようにして performance に awareness なイケてる C++er になろうと思います