main() の外の関数で構造体を使用するには、前方宣言を使用して main() で定義できますか、それともブロックの外で定義する必要がありますか?
質問する
2093 次
1 に答える
4
の内部で構造体を定義すると、構造体main()
のグローバル名が非表示になります。したがって、 の外側の関数main()
はグローバル名のみを参照できます。この例は、C++ 2011 ドラフト、セクション 9.1 p2 からの抜粋です。
struct s { int a; };
void g() {
struct s; // hide global struct s
// with a block-scope declaration
s* p; // refer to local struct s
struct s { char* p; }; // define local struct s
struct s; // redeclaration, has no effect
}
関数スコープ外からローカルに定義された型を参照する構文はありません。そのため、テンプレートのインスタンス化を表現する方法がないため、テンプレートを使用しても失敗します。
template <typename F> void bar (F *f) { f->a = 0; }
int main () {
struct Foo { int a; } f = { 3 };
bar(&f); // fail in C++98/C++03 but ok in C++11
}
実際、この回答で説明されているように、これは C++11 で許可されるようになりました。
于 2012-09-19T02:21:46.467 に答える