Mats Peterssonの結果に基づいて、いくつかのテストを行いました。マクロを定義してアサーションのオンとオフを切り替える作業は必要ありません。私の結論は次のとおりです。
- 、、などの標準ヘッダーを含めると
<cassert>
、コンパイル時間がほとんどかかりません。気にする必要はありません。<vector>
<memory>
- 独自のファイルを含める場合は注意してください。扶養家族は扶養家族の変更後に再コンパイルする必要があるため、本当に必要なものを含めます。
<QWidgets>
(すべてのウィジェットを含めるためのQtヘッダー)などのクラスライブラリのコレクションヘッダーを含める場合は注意が必要です。これはコンパイルに非常に時間がかかります。
[元の投稿]
すべてのファイルに「assert.h」が含まれていると、コンパイルに時間がかかりますか?「math.h」やその他の一般的なファイルについても同様の質問だと思います。プリコンパイル済みヘッダーは好きではありません。これは、x、y、zコンポーネントを使用して3D空間のベクトルを表すVector3Dクラスがある場合に発生します。このクラスはほとんどどこでも使用されます。component(int i)
whereが0から2の間でアサートされるという名前の関数がi
あります。パフォーマンス上の理由から、その実装をcppファイルに入れません。したがって、「assert.h」はほとんどすべての場所に含まれています。
#pragma once
#include <assert.h>
/// A vector in a 3D space with 3 components: x, y, and z.
class Vector3D
{
public:
Vector3D(float x = 0, float y = 0, float z = 0)
{
m_component[0] = x;
m_component[1] = y;
m_component[2] = z;
}
float x() const {return m_component[0];}
float y() const {return m_component[1];}
float z() const {return m_component[2];}
void setX(float x) {m_component[0] = x;}
void setY(float y) {m_component[1] = y;}
void setZ(float z) {m_component[2] = z;}
float component(int i) const
{
assert(i >= 0 && i < 3);
return m_component[i];
}
float& component(int i)
{
assert(i >= 0 && i < 3);
return m_component[i];
}
private:
float m_component[3];
};
Floris Vellemanに触発されて、オンとオフを切り替えるASSERTを定義するファイルを追加します。これは、assertを使用してコード内でに変更assert
する必要があります。ASSERT
ありがとう。
#ifdef USE_ASSERT
# include <assert.h>
# define ASSERT(statement) assert(statement)
#else
# define ASSERT(statement)
#endif