C++ supports a construct that is called unnamed namespace. with unnamed namespace, one can declare entity local to a file.
First let's see an example that uses unnamed namespace.
/**
* @Name
* main.cpp
* @Summary
* Test that unnamed (anonymous) namespace can be used in lieu of static something in C (some local scope construct)
* @NOTE
* this is a test cpp source file
*/
#include <iostream>
using namespace std;
namespace {
void f() {
cout << "inside f() " << endl;
}
}
int main(int argc, char* argv[])
{
f();
}
to test that the function only have local visiblity, we can write a new lib.cpp file
/**
* @Name
* lib.cpp
* @Comment:
* use an external symbol, which is f(), there is a local f symbol defined in the main.cpp file
* you are suppose to get the following compile error or similar (depends on the implementation of the compiler)
* unresolved symbols:
* void __cdecl f(void) (?@@YAXXZ)
*
*/
extern void f();
void g()
{
f();
};
as you can see, it has the same semantic of the following
static void f()
{
cout << "inside f()" << endl;
}
本文通过示例介绍了C++中匿名命名空间的使用方法。它允许声明仅在当前文件可见的实体,类似于C语言中的静态作用域。文章还提供了一个测试实例,展示了如何确保函数仅在定义它的文件内可见。
598

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



