静态方法中的静态变量不会改变
static variable inside static method doesn't change
我想创建一个类,它有一个静态方法,该方法返回对静态变量(在方法内部声明)的引用。我想要的是调用该方法以获取静态变量的引用。然后,当我在类外修改它并再次调用该方法以获得我之前设置的相同值时。
这是我尝试过的:
#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;
}
相关文章:
- 变量没有改变?通过向量的函数调用
- 在向量内更改变量的值不会改变其在向量外的值
- C++11:具有互斥锁的线程看到原子变量的值发生变化,尽管这是唯一可以改变它的代码
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 标准在哪里定义了可变变量可以改变
- C++11:可变的 lambda 似乎没有改变变量?
- printf() 似乎改变了一个变量
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- 为什么 Player.x 和 Player.y 变量没有改变?
- C - 如何将各处的静态函数称为改变其私有变量
- 即使"friend class rect"在平方类中被评论,为什么它要改变矩形类的私有变量?
- 为什么调用 CUDA 内核函数时这个类成员变量没有改变
- 全局变量的顺序会改变C /OpenGL的性能
- 为什么一个函数的末尾有常量这个词,即使它确实改变了一个变量
- 如何在C++中改变超类和子类的变量
- setRoomName不会改变变量roomName
- 不能改变变量的值
- 是否有一种方法可以改变变量在内存中的存储方式(位大小)
- Std::cout改变变量的值
- 使用引用改变变量的地址