ヘッダーファイルでは、大域定数を宣言して1行に定義することができます。多くの翻訳単位に含まれると、静的定数のオーバーヘッド?
// constants.h
namespace Constant{
static const unsigned int framerate = 60;
static const char * const windowName = "Test";
static const unsigned char * const cursorBitmap = { lots of data };
}
それは私が一つの場所で私の定数を保つことができ、1つのファイルで定数を宣言し、可読性を手伝っ、他でそれを定義する必要が避けられるので、私はこの形式を好みます。ただし、いずれの翻訳単位にもconstants.h
が含まれている場合は、これらの定義を単位としてに展開します。。
constants.h
を多くの翻訳単位に含めると、例えばcursorBitmap
などの配列定数が非常に大きいと私の質問になりますが、 100単位に含めると、私のプログラムには各文字列と配列リテラルの100個のコピーが含まれますか?または、ポインタと値だけがコピーされますか?
オーバーヘッドがある場合は、宣言と定義を分ける必要なく回避できますか?
(また、私は「静的」を推測しているが、この使用法では冗長ですが、私はとにかくそれを置くのが好き)、文字列リテラルは、様々な翻訳単位内で重複しているかどうかは
また、C++ 17ドラフトには 'inline'変数があります。 – Simple
これは**これらの変数を別のファイルに定義する必要はありません**。それらは宣言であり、多くの場合、定義を提供する必要はありませんが、場合によっては定義する必要があります。たとえば、これらの定数のいずれかを参照渡しする関数に渡す場合は、定義が必要です。 –