C++ 在未命名的命名空间中声明变量

C++ 在未命名的命名空间中声明变量,c++,pimpl-idiom,C++,Pimpl Idiom,在我当前的工作中,我看到变量在cpp文件中的未命名名称空间中声明,并且仅由该类使用,就好像它们是成员变量一样 我认为这是一种有趣的方法,只将接口信息保存在.h中,将实现保存在.cpp中,而且比通常的pimpl习惯用法工作量要少 我看到人们一直在使用pimpl,但从来没有使用过这种方法,有什么问题吗?在.cpp文件的未命名名称空间中声明的变量是文件范围的;这意味着程序每次执行只有一个实例 通过创建对象的两个实例并观察它们在未命名名称空间中相互干扰变量,您可以自己看到这一点。请展示一些示例代码。好的

在我当前的工作中,我看到变量在cpp文件中的未命名名称空间中声明,并且仅由该类使用,就好像它们是成员变量一样

我认为这是一种有趣的方法,只将接口信息保存在.h中,将实现保存在.cpp中,而且比通常的pimpl习惯用法工作量要少


我看到人们一直在使用pimpl,但从来没有使用过这种方法,有什么问题吗?

在.cpp文件的未命名名称空间中声明的变量是文件范围的;这意味着程序每次执行只有一个实例


通过创建对象的两个实例并观察它们在未命名名称空间中相互干扰变量,您可以自己看到这一点。

请展示一些示例代码。好的,您不能在未命名的命名空间中声明成员变量(除非类本身在未命名的命名空间中声明)


引入未命名名称空间是为了取代将变量声明为仅在一个编译单元中使用的静态变量的常见做法。

pimp习惯用法是“money==power”吗?在旧C中,必须标记全局变量和函数
static
,以使它们保持在文件的本地,而不导出。在C++中,你可以使用匿名的名字空间来达到同样的效果。你能举个例子吗?不能在命名空间范围内声明成员,只能在类中声明它们。如果它们在命名空间范围内声明(未命名或未命名),则它们不是成员。只有在.cpp文件的未命名命名空间中声明的
static
变量才是文件范围。否则,它们可能具有外部链接,并且可以从其他文件访问well@Andrew未命名命名空间中的非静态变量可能具有外部链接,但无法从其他转换单元访问它们:请看我的错误,这些变量不再是成员变量,但只被该类当作成员变量使用。它们不能用作成员变量,因为每个类只有一个实例。但是,它们可以像静态成员变量一样使用