2010-03-05 37 views
1

我刚刚碰到下面的代码:C++内联类的定义和对象初始化

#include <iostream> 

static class Foo 
{ 
public: 
    Foo() 
    { 
     std::cout << "HELLO" << std::endl; 
    } 

    void foo() 
    { 
     std::cout << "in foo" << std::endl; 
    } 

} 
    blah; 

int main() 
{ 
    std::cout << "exiting" << std::endl; 
    blah.foo(); 
    return 0; 
} 

我还没有看到definining变量的上述方法之前 - 类定义与变量进行在线定义。它让我想起了Java中的匿名类。这是什么叫的,它是在C++标准?

由于

塔拉斯

回答

3

这是相当标准来定义class(或struct,除了默认是public代替private完全当量)和声明其类型的变量(或指针这样的变量等) - 在C(是确定与struct,但我已经讲过了C++的class,节省公共VS私,是一回事struct)和C++大多向上保持与(ISO-1989)C.兼容性从来没有听说过任何特殊名字。

+0

是否有必要为类在这种情况下,被命名为(即,被匿名类用C允许++)?而且,既然它被命名了,你还可以创建其他'Foo'对象吗? – 2010-03-05 04:38:11

+1

...即将与ISO C99兼容。不过,我应该补充一点,即使它是合法的,这种用法在习惯C++中也很少见。 –

+3

@STingRaySC:没有,匿名类都很好,是的,你可以创建其他人。事实上,即使它是匿名的,也可以创建两个:'struct {...} foo1,foo2;'。 – Potatoswatter