要在 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 回答