【问题标题】:static variable inside static method doesn't change静态方法中的静态变量不会改变
【发布时间】:2013-01-25 14:23:18
【问题描述】:

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

这是我尝试过的:

#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

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

谢谢!

【问题讨论】:

  • 你永远不会这样做A::f()=something;
  • 为什么不呢?试过了,效果很好......
  • “你从不做”就像“你忘了做”,而不是“你不能做”。
  • 你的意思是这是不好的做法?....我在我正在开发的一个非常大的生产应用程序中看到了类似的代码,这就是我问的原因。
  • 不!正如我在上一条消息中试图解释的那样,您误解了我的英语。写A::f()=3是件好事。您问题中的程序很糟糕,因为它不包含任何此类声明。

标签: c++ oop static static-methods


【解决方案1】:

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

你应该做的是

int &i = A::f();

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      它必须是main 中的一个int&amp;,如果您希望对int 的更改是对f 的返回值所引用的int 的更改。

      【讨论】:

        【解决方案4】:

        您可能想要初始化您的变量。 您可以直接使用它,或者您可能希望将引用“保存”在本地引用中。 但是您不能重新分配这些本地引用。例如:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          • 2015-07-22
          相关资源
          最近更新 更多