1
struct a{static int z;}l;
(a is declared at file scope)    

我无法使用初始化列表初始化 z 。静态结构成员是什么意思?

z(name) 是否也具有外部链接和公共访问权限?

(我认为这意味着你给它文件范围并将它分组在一个(并且可以通过一个对象进行公共访问)?..为什么我不能初始化?)

另外....如果我在一个类中有一个静态结构成员怎么办?

4

1 回答 1

13

staticclass/的成员struct不是特定于该class/的具体实例的成员struct。除了一些特殊情况外,它几乎总是必须在编译单元之一中显式初始化。然后可以使用定义它的命名空间访问它:

#include <iostream>

struct a {
    static int z;
    int i;
} l;

int a::z = 0; // initialization

int main() {
    a::z = 3;
    l.i = 4;
    std::cout << a::z << ' ' << l.i;
    return 0;
}

输出3 4


“我无法使用初始化列表初始化 z。”
这是因为初始化列表用于struct在构造特定实例的成员时对其进行初始化。静态成员以不同的方式构造和初始化。

“如果我在一个类中有一个静态结构成员怎么办?”
唯一的区别是,在默认情况下定义的成员classprivate,不像struct,在哪里public

于 2013-10-19T18:41:19.307 回答