意外的静态计数器变量行为

时间:2017-11-17 01:39:40

标签: c++ static

最近我尝试了解静态关键字,在这里我尝试简单地在函数中使用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++ 但它们主要围绕着在类中使用的静态关键字。

2 个答案:

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

你可以看到计数器递增。