2011-01-21 25 views

答えて

4

これは、即時ブロックスコープ内の宣言と、ローカルクラスのメンバー関数としての関数定義の両方として有効です。

void f() { 
    // this declares the function defined below (enclosing namespace) 
    void g(); 
    g(); 
} 

void g() { 
    struct { 
    void help() { ... } 
    } h; 
    h.help(); 
} 
3

はい、そうです。この質問は簡単に答えることができました。あなたはそれを試して見たことがあります。実際、あなたがこれを行うことができるという事実は、面白いC++エラーの原因の1つです:

class A { 
public: 
    operator int() const { return 0; } 
}; 
void joe() 
{ 
    // Initializing an int? 
    int fred(A()); 
} 
+5

はい彼が持っている可能性があり、多分彼はそれがのが理由だったこと... :) – villintehaspam

+0

@villintehaspamを許可されているだけで彼のコンパイラではなかったことを知りたいと思いました。 –

1

はい、それは合法です。 C++の仕様を参照

は、関数定義(8.4)の本体は、順番に(6.3)宣言することができる一つが一つ以上のを含み、化合物文を含有します計算