在函数定义中使用函数声明是合法的C ++吗?
答案 0 :(得分:4)
它既可以作为直接块作用域中的声明,也可以作为本地类成员函数的函数定义。
void f() {
// this declares the function defined below (enclosing namespace)
void g();
g();
}
void g() {
struct {
void help() { ... }
} h;
h.help();
}
答案 1 :(得分:3)
是的,确实如此。虽然这个问题很容易回答。你可以尝试一下并看到它。事实上,你可以做到这一点的事实是一个有趣的C ++错误的来源之一:
class A {
public:
operator int() const { return 0; }
};
void joe()
{
// Initializing an int?
int fred(A());
}
答案 2 :(得分:1)
是的,这是合法的。
参考C ++规范,函数定义(8.4)的主体包含复合语句,而反过来(6.3)包含一个或多个语句 ,其中一个可以是声明 - 声明。