C++匿名命名空间:变量是否初始化为0?

4
这里有一个相关的未解答问题:
c++ - Variables auto-initialized to 0 in unnamed namespace? - Stack Overflow 在C语言中,当我有一个全局函数指针时,我可以将其声明为静态的,并且它会被初始化为空并仅对我的文件可用。在C++中,我将很多东西都切换到匿名命名空间,但我想知道它们是否保持相同的保证。如果我在匿名命名空间中有一个函数指针,它会被初始化为空吗?
谢谢

只需将其自行初始化为NULL。这是最清晰的方式。 - nneonneo
不,"namespace"与此无关:静态存储总是初始化为0/NULL。而且,明确指定"static struct *myptr = NULL;"绝对是一个好习惯,这样可以使你的意图更加明确。在我看来... - paulsm4
1个回答

10

所有具有静态存储期的变量在程序启动时都被初始化为零。这些变量包括在命名空间作用域中声明的所有变量(在全局命名空间或任何其他命名空间中,包括无名称的命名空间)。


请确认一下,您是在说像 namespace { int var; } 这样的东西具有静态存储期吗? - loop
@test:是的。命名空间与此无关。 - Ed S.
好的,谢谢。等10分钟过去后,我会将其标记为正确。 - loop
2
所有没有动态存储期、线程存储期和不是局部变量的变量都具有静态存储期。[...] 关键字 static 可以用于声明具有静态存储期的局部变量。[...] 在类定义中应用于类数据成员的关键字 static 给出了数据成员的静态存储期。—— [basic.stc.static] 3.7.1 - bames53

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接