2

だから私はライブラリを書いていて、piの値を持つ定数を定義したいと思います。static const float pi=3.14を定義することを考えていました。pi.hファイル内。

ただし、ヘッダーファイルで変数を定義するべきではないことを読んだので、それがその方法ではないとほぼ確信しています。

私が考えたもう1つの方法は、円周率の値を返すインライン関数を宣言することでしたが、それを操作するのは厄介です。

別の方法(私は思う)は、それをpi.ccに入れてライブラリにコンパイルし、extern static constfloatpiを使用することです。piを使用しているファイルでは、もちろんそれらのファイルをライブラリにリンクします。

これを行うための最良の方法は何ですか?標準ライブラリはおそらくマクロを定義しますが、定数の方が良いと思います。

4

6 に答える 6

1

私の提案は、定数をヘッダーファイルに配置することです。定数は、良いことである値型情報を提供します。

定数は変数ではないため、ヘッダーファイルに配置できます。

于 2012-04-17T19:08:44.403 に答える
1

マクロ#define_USE_MATH_DEFINESも取り込む必要があります

Visual C ++ 2008で数学定数(M_PIなど)にアクセスするにはどうすればよいですか?

于 2012-04-17T19:15:00.357 に答える
1

ヘッダーファイルに定数を入れない理由の1つは、定数が変更された場合に(単に再リンクするのではなく)ライブラリを使用してコードを再コンパイルしないようにするためです。この理由は、プログラムが維持されている間は決して変化しないπなどの定数には当てはまりません。

定数が浮動小数点値の場合、追加の問題があります。C ++では、浮動小数点定数にストレージが割り当てられており、.hファイルではなく.cppファイルで初期化されている必要があります。これにより、定数は同等のインライン関数よりも効率が低下する可能性があります。これが、Boostライブラリがインライン関数を使用する理由です。この回答を参照してください。

したがって、あなたの場合、最善の策はおそらくBoostライブラリを使用することです。依存関係を取得したくない場合は、同じことを行うインライン関数を作成することです。

于 2012-04-17T19:16:48.403 に答える
0

ヘッダーファイルで定義されている定数変数をよく目にします。それをするというあなたの考えは私には理にかなっているようです。静的にすることも問題ないようです。

于 2012-04-17T19:06:38.517 に答える
0

PI定数をヘッダーと実装の2つのファイルに分割することもできます。宣言と実装を分離すると、インターフェイスを変更せずにpiの値を(たとえば、より正確に)変更できます。

これは、単純なpi.hファイルで行うことができます。

extern float pi;

およびpi.c:

float pi = 3.14;
于 2012-04-17T19:28:37.920 に答える
0

私はそれを作りますstatic constが、そうではなくextern、ヘッダーファイルに配置します。 static const現在のコンパイル単位でのみアクセス可能な定数変数であることをコンパイラーに通知します。これにより、コンパイラーは実際のストレージを最適化して、値を直接使用することができます。

于 2012-04-17T19:50:00.217 に答える