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

时间:2013-01-25 14:23:18

标签: 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;
}

问题是此代码的输出是:

0
11
0
Press <RETURN> to close this window...

为什么不返回0, 11, 11,如何让它返回0, 11, 11

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

谢谢!

4 个答案:

答案 0 :(得分:6)

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

你应该做的是

int &i = A::f();

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

答案 1 :(得分:4)

要让局部变量i引用函数内的相同变量,请将其声明为引用:

static int& i = A::f();

否则,您只是创建一个新变量并使用A::f()来分配它。

答案 2 :(得分:4)

如果您希望对int&的更改更改为main的返回值引用的int,则int中的f必须为{{1}}。

答案 3 :(得分:2)

您可能想要启动变量。并且 您可以直接使用 ,或者您可能希望在本地参考中“保留”该引用。 但是你无法重新设置这些本地引用。例如:

int main()
{
    A::f()=3;
    cout << A::f() << endl;

    static int &i = A::f();
    cout << i << endl;

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

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

    int &ii = A::f();
    cout << ii << endl;

    return 0;
}