1

時々私は次のようなコードを書きます

struct Bob
{
    Bob() {}
};

int main()
{
    Bob b();
}

私がやりたかったのは、ボブのデフォルトのコンストラクターを使用して、オブジェクト b を作成することです。それを修正するには、b の後にブラケットを削除する必要があります。それ以外の場合、コンパイラは行を関数プロトタイプとして解釈することがわかりました!

わかりました、ルールに従うことは理解できます。しかし、関数プロトタイプを関数内に配置できるのはなぜでしょうか? 目的は何ですか?

4

1 に答える 1

2

おそらく、C では構文に他の意味がなかった (メンバー関数やコンストラクターがない) ため、関数宣言として指定したためです。

その後、C++ が C から機能を継承したとき、既存のコードが壊れる危険を冒さずにそのような構造の意味を変更することはできませんでした。

ローカル関数宣言を許可する理由を尋ねている場合は、関数をできるだけ近くにスコープして使用できるようにしたかったためか、時間の経過とともに失われた可能性があります。

于 2013-07-15T18:19:19.580 に答える