C++命名空间函数定义只有static关键字



我知道静态名称空间函数可能被声明为static,函数的定义中省略了static关键字。我所拥有的恰恰相反,例如:

// in foo.h
namespace Foo
{
void bar();
}
// in foo.cpp
static void Foo::bar()
{
}

static关键字在这里有任何作用吗,或者它只是被忽略了?它以任何一种方式编译,其他翻译单元都可以使用这些功能。

从dcl.stc可以看出,给定的程序格式不正确,状态为:

给定实体的连续声明所暗示的联系应一致。也就是说,在给定的范围内,每个声明相同的变量名或函数名的相同重载都意味着相同的链接。

(结束报价(

现在,让我们将此应用于您的示例。

// in foo.h
namespace Foo
{
void bar(); //#1 external linkage
}
// in foo.cpp
static void Foo::bar()  //#2 tries to give Foo::bar internal linkage 
{
}

在上面的代码中,bar的第一个声明#1为其提供了外部链接,而当在#2的源文件(foo.cpp(中实现它时,您正试图为其提供内部链接

相关内容

最新更新