72

extern constのように extern と const を混在させることはできますか? はいの場合、const修飾子は、宣言されているスコープ内でのみ支配することを課しますか、それとも宣言されている翻訳単位の宣言と正確に一致する必要がありますか? extern const int i;つまり、実際のiが const でない場合でもsay を宣言できますか? またその逆も可能ですか?

4

5 に答える 5

70
  • はい、一緒に使用できます。
  • そして、はい、それは実際に宣言されている翻訳ユニットの宣言と完全に一致する必要があります。もちろん、UnderhandedCプログラミングコンテストに参加している場合を除きます:-)

通常のパターンは次のとおりです。

  • file.h:
    extern const int a_global_var;
  • file.c:
    #include "file.h"
    const int a_global_var = /* some const expression */;

編集:組み込みのlegends2kのコメント。ありがとう。

于 2010-02-03T09:42:23.567 に答える
5

一緒に使用できます。ただし、C ++が名前の装飾を行う場合、constはシンボル名の装飾に使用される型情報に含まれるため、constの使用に一貫性を持たせる必要があります。したがって、extern const int iとは異なる変数を参照しますextern int i

extern"C"{}を使用しない限り。Cの名前の装飾はconstに注意を払いません。

于 2010-02-03T09:39:14.500 に答える
1

それらを一緒に使用することができ、constキーワードを無視するあらゆる種類のことを行うことができます。それがすべてだからです。キーワード。これは、変数を変更しないことをコンパイラーに通知します。これにより、コンパイラーはいくつかの有用な最適化を実行でき、意図しないものを変更できなくなります。

Possibility.comには、もう少し背景のあるまともな記事があります。

于 2010-02-03T09:38:37.823 に答える
-1

はい、併用できます。

「extern const int i」を宣言すると、i はその全範囲で const になります。非定数として再定義することはできません。もちろん、(const_cast を使用して) キャストすることで、const フラグをバイパスできます。

于 2010-02-03T09:33:32.963 に答える