在C++中使用C和plain函数,我可以使用static
关键字阻止函数的符号输出:
static int foo(int a, int b) { /* ... */ }
但在一个类中,定义一个函数static
具有完全不同的含义.有没有办法确保编译器我的整个类只能在模块中使用,而且不需要导出它的任何方法的符号?
使用匿名命名空间.
namespace { class C { C() {} void f() {} }; void f(); } class ExportedClass { ExportedClass() {} void f() {} }; void exportedFunction() {}
如您所见,您也应该为正常功能执行此操作.static
不鼓励使用此方法.
您可以使用匿名命名空间.例如,
// file foo.cc namespace { int symbol1 = 0; struct auxiliary { /* ... */ } symbol2; } void foo(int x) { // uses symbol1 and symbol2 }
何时symbol1
和symbol2
不"可见".