私はこの質問をするように私を導くリンクされた質問を読んでいました。
次のコードを検討してください
int main()
{
string SomeString();
}
言うまでもなく、コンパイラはこれを文字列オブジェクトとしてではなく、関数プロトタイプとして受け取ります。ここで、次のコードについて考えてみます。
int main()
{
string Some()
{
return "";
}
}
入れ子関数の定義は許可されていないと思うので、コンパイラはこれは無効だと言いました。許可されていない場合、ネストされた関数プロトタイプが許可されるのはなぜですか?それは混乱を招くよりも利点を与えていません(または私はここでいくつかの有効なポイントを逃していますか?)。
以下が有効であることがわかりました。
int main()
{
string SomeFun();
SomeFun();
return 0;
}
string SomeFun()
{
std::cout << "WOW this is unexpected" << std::endl;
}
これも紛らわしいです。関数SomeFun()がmainにのみスコープを持つことを期待していました。しかし、私は間違っていました。なぜコンパイラは上記のようなコードをコンパイルできるのですか?上記のようなコードが理にかなっているリアルタイムの状況はありますか?
何かご意見は?