一、本质区别
static关键字声 明的符号有内部链接属性,而匿名命名空间中声明的符号有外部链接属性。
二、static
C和C++中每一个源文件(.c, .cpp)都可以单独编译成一个目标文件(.o),之后通过链接器把这些目标文件链接起来,形成最后的可执行文件或者库文件。也就是说某个源文件 a.cpp中用到的符号s(函数,全局变量等)可能是在另一个源文件b.cpp中定义的, 在 a.cpp中只要给出相应的声明就可以了。为了让链接器可以找到符号s的定义,b.o 必须提供它定义的所有可链接的符号。b.o只会提供具有外部链接熟悉的符号给链接器使 用,如果一个符号在声明中加了static 关键字,那么它的链接属性变成了内部链接,也 就不会暴露给链接器进行链接,这样一来它也就只能被文件内部看见了。
三、匿名名字空间
匿名名字空间并不是真的没有名字,只不过这个名字只有编译器知道而已,下面的代码
namespace {
struct Widget {
};
} // namespace
实际上经过编译器的处理之后可能是下面这个样子:

本文详细介绍了C++中static关键字和匿名命名空间的区别。static用于限制符号的链接属性为内部链接,仅在当前源文件内可见,而匿名命名空间虽然没有显式名称,但其作用域限制使得其中的符号对外不可见,实现了类似的效果。这两种方式都是为了控制符号的可见性和作用域。
最低0.47元/天 解锁文章
665

被折叠的 条评论
为什么被折叠?



