函数定义中的函数声明

时间:2011-01-21 10:47:50

标签: c++

在函数定义中使用函数声明是合法的C ++吗?

3 个答案:

答案 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)包含一个或多个语句 ,其中一个可以是声明 - 声明