静态方法中的静态变量不会改变

static variable inside static method doesn't change

本文关键字:改变 变量 静态 静态方法      更新时间:2023-10-16

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

这是我尝试过的:

#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

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

谢谢!

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

相反,你应该做的是

int &i = A::f();

请注意,不需要static局部i:对静态数据的引用可以毫无问题地存储在自动变量中。

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

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

否则,您只需创建一个新变量并为其分配A::f()

如果您希望对该

int的更改是返回值 f 所引用的 int 的更改,它必须是 main 中的一个int&

你可能想要启动你的变量。您可以直接使用它,或者您可能希望在本地引用中"保留"引用。但是您不能重新分配这些本地引用。例如:

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;
}