静态内联方法无需静态成员初始化



有类:

k.h

class k
{
    static int ii;
    static void foo();
};

k.cpp

#include "k.h"
void k::foo()
{
    ii++;
}

在编译期间,我会收到以下错误消息:

error LNK2001: unresolved external symbol "private: static int k::ii" (?ii@k@@0HA)

没关系。但是,当我将inline关键字添加到方法时,错误就会消失:

class k
{
    static int ii;
    inline static void foo();
};

这不是现实世界的示例,但是我不知道该代码到底发生了什么,可能有人向我解释?

此代码:

#include <iostream>
using namespace std;
struct k
{
    static int ii;
    static void foo();
};
void k::foo() {
    ii=0;
}
int main() {
    // your code goes here
    return 0;
}

给出链接错误,因为编译器函数k :: foo是输出的,并且它引用了k :: ii。

此代码:

#include <iostream>
using namespace std;
struct k
{
    static int ii;
    inline static void foo();
};
inline void k::foo() {
    ii=0;
}
int main() {
    // your code goes here
    return 0;
}

没有给出链接错误,因为函数k :: foo被声明为内联,并且不会从任何地方调用,因此编译器实际上从未为此生成任何代码。

如果您在MAIN或其他任何地方添加了呼叫,则将获得链接错误。

最新更新