2011-01-21 131 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++错误的来源之一:

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

是的,他可以,但也许他想知道,这不只是他的编译器,它允许它...... :) – villintehaspam 2011-01-21 10:51:33

1

是的,这是合法的。

参照C++规范,一个函数定义(8.4)的所述主体包含化合物语句,这反过来(6.3)包含一个或多个语句,其中之一可以是声明 - 陈述