【发布时间】:2022-07-21 23:42:46
【问题描述】:
我了解静态命名空间函数可以声明为静态的,并且在函数定义中省略了 static 关键字。我所拥有的是相反的,例如:
// in foo.h
namespace Foo
{
void bar();
}
// in foo.cpp
static void Foo::bar()
{
}
static 关键字在这里有什么作用,还是被忽略了?它可以编译任何一种方式,并且这些功能可用于其他翻译单元。
【问题讨论】:
-
在我的系统上,我得到
error: static declaration of 'bar' follows non-static declaration -
您使用什么编译器和版本来编译该代码?
-
static在此上下文中意味着:此符号仅在当前翻译单元中可见。所以如果它编译,当符号用于不同的翻译单元时会导致链接问题。 -
clang、gcc 和 MSVC 都拒绝此代码:godbolt.org/z/nY4c7fsqs。它可能编译的唯一方法是
foo.h不包含在foo.cpp中