第一次调用该函数时,它返回1.每隔一次调用它就会返回1 +上次调用时返回的数字。
int counter()
{
return counter()++;
}
这有效吗?
答案 0 :(得分:2)
听起来你想要一个static variable:
int counter()
{
static int count = 0; // initialized only once across all calls
return ++count;
}
答案 1 :(得分:2)
您可以使用static
。
int counter()
{
static int counter = 0;
return ++counter;
}
静态(在函数体上下文中)只是一个很好的关键字,它使变量基本上是全局的,但不是语义上的。所以你不能在函数之外使用它,但是它会被所有全局变量初始化(这意味着一旦接近起点)并且存储在其他全局变量的位置。
仅供记录,因为c++
标签。您可以编写一个仿函数类,其中包含私有count
变量和重载operator()
。或者甚至可能是一个能够包装任何函数并计算其调用的模板。
另请注意,在您的尝试中,您递归调用counter
,没有具有固定值的退出点。它永远不会完成(除非你将堆栈溢出计算为结束)。
答案 2 :(得分:0)
除了在函数中定义静态局部变量之外,您还可以定义一个静态类成员函数,该函数将增加同一个类的静态数据成员。例如
#include <iostream>
class Counter
{
public:
static int Count() { return ( ++cnt ); }
static int Reset() { return ( cnt = 0 ); }
private:
static int cnt;
};
int Counter::cnt = 0;
int main()
{
for ( int i = 0; i < 10; i++ ) std::cout << Counter::Count() << ' ';
std::cout << std::endl;
std::cout << "\nResetting the counter to " << Counter::Reset() << std::endl;
for ( int i = 0; i < 10; i++ ) std::cout << Counter::Count() << ' ';
std::cout << std::endl;
}
答案 3 :(得分:0)
如果使用C ++ 11,请使用std::function
和可变lambda表达式:
#include <iostream>
#include <functional>
using namespace std;
int main()
{
function<int()> func = [&]()
{
static int i = 1;
return i++;
};
for(int i = 0; i < 10; i++)
cout << func() << endl;
return 0;
}