我正在寻找一种方法,让一个int变量在方法调用中保持值。从这个角度来看,一个班级成员会很好。
但我希望只在一个特定方法中更改int变量。
我该怎么做?
我很苛刻
void MyClass::my_method(){
static int var = 0;
var++;
}
但是,我希望var = 0;
仅在第一次执行。
答案 0 :(得分:2)
void my_method(){
static int var;
var++;
}
这里的问题是,
static int var;
仅在my_method()
的本地范围内可见。
您可以根据my_method()
之外的变量定义将其设为全局:
int var;
void my_method() {
var++;
}
但每个人都可以看到var
。
更好的方法是将所有内容封装到一个类中:
class MyClass {
public:
static void my_method() {
var++;
}
private:
static int var = 0;
};
答案 1 :(得分:2)
您可以使用以下密钥访问模式:
struct Foo {
void fun1();
void fun2();
static class Var {
friend void Foo::fun1();
int i = 0;
public:
int value() const { return i; }
} var;
};
Foo::Var Foo::var;
void Foo::fun1() { var.i = 42; }
void Foo::fun2() {
// var.i = 42; // this will generate compile error cause fun2 doesn't have to var
}
这样,只有在包装类Foo
中声明为朋友的Var
成员函数才能更改其私有成员变量(例如var.i
)。
答案 2 :(得分:0)
var只是本地的,如果你希望在函数第一次返回时为0,则将其初始化为-1或者如果0恰到好处,你就可以了。因为var只在my_method中可见,所以如果你希望它对所有类都可见,你必须将它放在外面并仅使用my_method来修改值。
答案 3 :(得分:0)
我还没有足够的回复评论,但你应该注意到静态不等于常数。
静态变量为类的所有实例维护其值,而Constant变量对于类的每个实例(对象)可以具有不同的值。
请参阅此问题以获得更深入的解释。 What is the difference between a static and const variable?
要直接回答您的问题,您不能拥有只能从一个班级编辑的真正的“全球”版本。相反,您应该考虑πάνταῥεῖ的答案或等待声明常量,直到您知道要分配给它的值。例如,我想将X + 10存储到常量变量Y
int x = 5 //create variable
//Do whatever you need to do to get the value
function myFunction(){
x = x + 10;
}
const int y = x; //now Y = 15 and cannot be changed.