静态方法内部的静态变量不会改变

Jac*_*ieg 2 c++ oop static static-methods

我想创建一个类,它有一个静态方法,返回对静态变量的引用(在方法内声明).我想要的是调用方法来获取静态变量的引用.然后当我在类之外修改它并再次调用该方法以获得我之前设置的相同值.

这是我试过的:

#include <iostream>
using namespace std;

class A
{
public:
    static int& f()
    {
        static int i;
        return i;
    }
};

int main()
{
    static int i;
    i = A::f();

    cout << i << endl;

    i = 11;
    cout << i << endl;

    i = A::f();
    cout << i << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是这段代码的输出是:

0
11
0
Press <RETURN> to close this window...
Run Code Online (Sandbox Code Playgroud)

它为什么不返回0, 11, 11,我怎样才能返回0, 11, 11

注意:我希望静态变量在方法内显式声明,而不是成员.

谢谢!

das*_*ght 6

这是因为您将引用返回的值复制到常规变量中:当您存储int&int,它不再是引用.

你应该做的是

int &i = A::f();
Run Code Online (Sandbox Code Playgroud)

请注意,本地i不需要static:对静态数据的引用可以存储在自动变量中而不会出现问题.