web-dev-qa-db-ja.com

「constクラス」とはどういう意味ですか?

リファクタリングを見つけて置き換えた後、私はこの宝石に行き着きました:

const class A
{
};

「constクラス」とはどういう意味ですか?コンパイルは問題ないようです。

36

「constクラス」とはどういう意味ですか?コンパイルは問題ないようです。

私にとってはそうではありません。あなたのコンパイラは丁寧でそれを無視しているだけだと思います。

編集:うん、VC++はconstを黙って無視し、GCCは文句を言う。

33
Mike F

その例ではconstは無意味であり、コンパイラーはエラーを出すはずですが、それを使用して、終了};の間でそのクラスの変数を宣言すると、これらのインスタンスをconstとして定義します。例:


const class A
{
public:
    int x, y;
}  anInstance = {3, 4};

// The above is equivalent to:
const A anInstance = {3, 4};
45
Adam Rosenfield

あなたがこれを持っていた場合:

const class A
{
} a;

そうすると、「a」がconstであることを明確に意味します。そうでなければ、それはおそらく無効なc ++だと思います。

22
Evan Teran

次の例のように、後でクラスのインスタンスを宣言しない限り、意味がありません。

const // It is a const object...
class nullptr_t 
{
  public:
    template<class T>
      operator T*() const // convertible to any type of null non-member pointer...
    { return 0; }

    template<class C, class T>
    operator T C::*() const   // or any type of null member pointer...
    { return 0; }

  private:
    void operator&() const;  // Can't take address of nullptr

} nullptr = {};

C++ 0xを待っている場合は、暫定的なnullptr実装。

10
Matt Joiner

GCCでコンパイルしてみてください。以下のエラーが表示されます。
error: qualifiers can only be specified for objects and functions.

エラーからわかるように、オブジェクト(変数、ポインター、クラスオブジェクトなど)と関数のみが定数になります。したがって、オブジェクトを定数として作成してみてください。そうすれば、正常にコンパイルされるはずです。
const class A {};
const A a ;

1
dr__noob