为什么c ++在函数定义中不接受静态关键字?

use*_*608 2 c++ static

我有一个程序,其中类T具有静态函数.

static void T::func()
{
    m_i=10;
    cout<<m_i<<endl;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在函数定义中添加静态时,编译器抛出错误错误:无法声明成员函数'static void T :: func()'具有静态链接.为什么在定义中不接受静态关键字?

Som*_*ude 9

问题是关键字static根据上下文意味着不同的东西.

当您将成员函数声明为静态时,例如

class T
{
    ...
    static void func();
    ...
};
Run Code Online (Sandbox Code Playgroud)

那么static关键字意味着它func是一个函数,它没有绑定到特定的对象.

在源文件中定义函数时,例如

static void T::func() { ... }
Run Code Online (Sandbox Code Playgroud)

然后设置功能链接,这与static在类中的声明中使用不同.什么static定义函数是说,该功能只在当前可用的时候做翻译单元,并且违背了声明,该功能可用于所有谁知道类.

根本不可能使成员函数(声明static与否)具有静态链接.


如果你想从其他人"隐藏"成员函数,那么就无法调用它,为什么不简单地将它作为private成员函数?您也可以使用像 pimpl习语这样东西,或者只是将它作为成员函数开始使用,在这种情况下,您可以声明它具有static 链接.