【发布时间】:2019-10-29 08:51:40
【问题描述】:
我在某处看到过该代码,但我不知道它是如何工作的。请解释:( 我的猜测是模板函数正在保存其他函数的状态。
代码:
#include <iostream>
int getID() {
static int id = 0;
return id++;
}
template <typename T>
int getID2() {
static int id2 = getID();
return id2;
}
int main() {
std::cout << getID2<int>() << std::endl;
std::cout << getID2<int>() << std::endl;
std::cout << getID2<double>() << std::endl;
std::cout << getID2<double>() << std::endl;
std::cout << getID2<int>() << std::endl;
return 0;
}
输出:
0
0
1
1
0
【问题讨论】:
-
应该指出,这些函数很可能不按照原作者的意图进行。显然,第一个会生成不断增加的(对于所有实际目的而言都是唯一的)ID。第二个(模板)创建一系列不断增加的 ID,每个 ID 都在自己的单独范围内,从第一个版本中提取的 ID 开始。除了...除了这不是真的,因为两个计数器不同步,所以很有可能,范围将重叠。它的“有趣”之处在于,根据使用情况,它实际上可能“起作用”。
标签: c++ variables static initialization local