c结构不允许静态成员,而c ++也是如此

时间:2012-06-21 13:09:38

标签: c++ c

今天,我对 c结构与c ++结构的行为感到有些惊讶。

fun.cpp:http://ideone.com/5VLPC

struct nod
{
    static int i;
};

int main()
{

    return 0;  
}

上述程序运作完美。

,但

当在 C 环境中运行相同的程序时,它会给出错误:

prog.c:3: error: expected specifier-qualifier-list before ‘static’

见这里:http://ideone.com/2JRlF

为什么会这样?

3 个答案:

答案 0 :(得分:7)

因为在C ++中,结构只是具有public默认可见性的类。所以在C语言中,struct只是一个数据聚合,它不知道它可以被认为是独立类型的事实。

另见What are the differences between struct and class in C++

答案 1 :(得分:4)

每个C ++类都有自己的类名称空间,因此您可以从类名称空间外部将该静态数据成员称为nod::i,并在其中仅使用i。 C没有命名空间作用域,并且没有代码“in”C结构,因此没有办法在名称空间中隐藏全局变量或者在它们自己的作用域中通过它们的非限定名称来引用它们。所以在C中没有动力让C ++中的东西成为静态数据成员。

只需int nod_i;

答案 2 :(得分:3)

static在C 中只有具有内部链接的含义。不要像C语言中的structstruct那样考虑C - class。它只是一个聚合器,而不是OOP构造。

由于C没有类,因此使用static没有意义。