クラスのconstインスタンスを宣言する 質問する

クラスのconstインスタンスを宣言する 質問する

次のように定義されたクラスがあるとします。

class foo{};

さて、これはまったく問題ありません。

foo f;

なぜこれがコンパイラエラーになるのでしょうか? ( uninitialized const ‘f’)

const foo f;

なぜこれをやらなければならないのでしょうか?

const foo f = foo();

なぜこれができないのかは分かっています。

const foo f(); // though it compiles..

興味深いことに、次のことは有効です。

const std::string f;

では何が欠けているのでしょうかfoo?

そこには 3 つの質問があり、形式が悪いことは承知していますが、誰かが 1 つの回答でこれを解決してくれることを期待しています。

編集: 愚かな内容であれば遠慮なく閉じてください...

ベストアンサー1

あなたのクラスはポッド(基本的にデフォルトコンストラクタを提供していないため)。POD変数はない宣言時に初期化されます。つまり、次のようになります。

foo x;

は x を意味のある値に初期化しません。これは別途行う必要があります。 として宣言すると、これ以上const割り当てたり変更したりすることができなくなるため、これが行われなくなる可能性がありますx

との同値性を考えてみましょうint:

int x; // legal
const int y; // illegal

ご存知のとおり、std::stringの代わりにを使用するとfooコンパイルされます。これは、std::stringが POD ではないためです。このジレンマを簡単に解決するには、 のデフォルト コンストラクターを用意しますfoo

class foo {
public:
    foo() { }
};

これでconst foo x;コードがコンパイルされます。

おすすめ記事