🔴 每种类型各生成一份,数给你看
(本条路线统一用 g++ -std=c++17 -O0 -Wall 编译)函数模板里的 static 变量,每一份各有一个:
#include <iostream>
#include <string>
/* 每用一种类型,编译器就替你生成一份独立的代码 —— 这叫实例化。
函数模板里的 static 变量**每一份各有一个**,正好能把这件事数出来。 */
template <typename T>
int used(const T &) {
static int n = 0;
return ++n;
}
template <typename T>
T twice(T x) { return x + x; }
int main() {
int i1 = 7, i2 = 8;
std::string s = "ab";
int a = used(i1); /* int 那一份:第 1 次 */
int b = used(i2); /* 还是 int 那一份:第 2 次 */
int c = used(s); /* string 是另一份:又从 1 开始 */
std::cout << a << "/" << b << "/" << c << "/" << twice(5) << "/"
<< twice(std::string("ab")) << "\n";
return 0;
}
全部评论