匿名命名空间和 static 声明的区别

发布时间:2024年01月22日

C语言中,如果我们想要一个符号只在文件内部(严格来说是编译单元内部,也就是经 过预处理之后得到的源文件)可用,我们需要把它声明成static,比如:

// widget.cpp
static void internal_function() { }
static int internal_value = 10;

C++中有一种推荐的等效做法——匿名的名字空间:

// widget.cpp
namespace {

void internal_function() {}
int internal_value = 10;

}   // namespace

之所以推荐在C++使用匿名名字空间来取代static的这种用法的原因主要有下面三个:

  1. static的这个关键词的用途过多,比如你还可以用它声明静态成员,用它声明函数内 部的静态变量。

  2. static没有办法修饰一个类型,所以下面的代码不合法:

static struct Widget {}; // 不合法

但是匿名命名空间可以:

namespace {
struct Widget {};   // 合法
}   // namespace

  3. 某些模板的参数必须具有外部链接

文章来源:https://blog.csdn.net/chenyuping333/article/details/135752644
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。