未命名的命名空间如何优于static关键字?
在C++中,可以static在翻译单元中使用关键字来影响符号的可见性(变量或函数声明).
在n3092,这被弃用了:
附件D.2 [depr.static]
在命名空间范围内声明对象时,不推荐使用static关键字(见3.3.6).
在n3225中,这已被删除.
它确实强调,为了与C兼容(以及将C程序编译为C++的能力),弃用令人讨厌.但是,直接将C程序编译为C++本身就是一种令人沮丧的经历,所以我不确定它是否值得考虑.
有谁知道为什么它被改变了?
C中翻译单元本地static函数的C++等价是多少?
例如,具有以下内容bar.c:
static void bar() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
在C++中,它是否会像一个私有成员函数一样编写
class foo {
void bar();
};
void foo::bar() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
私有成员函数隐式地将this指针引入为参数,因此它与C样式static函数不具有可比性.但即使是private static成员函数bar()也会在公共接口中看到(并且对于链接器而言仍然可访问),并且也不具有可比性.
虽然这些函数的可访问范围似乎相似,但这些选项看起来不像上面提到的C风格static函数语法的良好替代.
等效于未命名命名空间中的函数,仅对当前转换单元可见吗?
namespace {
void bar() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)