最近我尝试了解静态关键字,在这里我尝试简单地在函数中使用static关键字作为变量声明。像这样:
void counter()
{
static int counter = 0; //should be initialized only once and once only
counter++; //increment for every call of this function
}
我理解由于变量是静态的,它将存在于函数之外,因此从我决定打印计数器的任何地方,它应该给我调用函数counter()
的次数。所以我做了一个简单的测试,如图所示:
int main()
{
for(unsigned int i = 0; i < 10; i++){
counter();
}
std::cout << counter << std::endl;
return 0;
}
从这个测试我希望得到10号......但是代码返回的计数是1。
拜托,我在这里缺少什么?
我发现其他提交“类似”问题,例如: static counter in c++ 但它们主要围绕着在类中使用的静态关键字。
答案 0 :(得分:2)
counter
仍然是local
内的void counter()
变量,因此您仍需要将其返回。
答案 1 :(得分:2)
您正在counter
中打印main()
,但未声明它。仅仅因为您在static
中将其声明为counter()
并不意味着您可以在main()
中访问它。
如果你这样做:
void counter() {
static int counter = 0;
std::cout << counter++ << std::endl;
}
int main() {
for(unsigned int i = 0; i < 10; i++){
counter();
}
return 0;
}
你可以看到计数器递增。