gpt4 book ai didi

c++ - C++ 中的静态成员和模板

转载 作者:太空狗 更新时间:2023-10-29 19:54:56 24 4
gpt4 key购买 nike

给定代码:

#include <iostream>
using namespace std;
template <typename T>
T my_max (const T &t1, const T &t2)
{
static int counter = 0;
counter++;
cout << counter << " ";
return ((t1 > t2) ? t1 : t2);
}
int main()
{
my_max (2,3);
my_max (3.5, 4.3);
my_max (3,2);
my_max ('a','c');
}

输出是:

1 1 2 1

我知道静态成员只初始化一次。我的问题是编译器如何记住调用该泛型函数的类型?幕后究竟发生了什么?

最佳答案

发生的事情是编译器为每种类型(当然使用一种)实例化函数。因此,您将在内部拥有以下“功能”:

int my_max (const int &t1, const int &t2)
{
static int counter = 0;
counter++;
cout << counter << " ";
return ((t1 > t2) ? t1 : t2);
}
...
double my_max (const double &t1, const double &t2)
{
static int counter = 0;
counter++;
cout << counter << " ";
return ((t1 > t2) ? t1 : t2);
}
...
char my_max (const char &t1, const char &t2)
{
static int counter = 0;
counter++;
cout << counter << " ";
return ((t1 > t2) ? t1 : t2);
}

我认为很明显,每个功能都是独立的。它们没有任何共同之处,只是它们是由相同的模板代码生成的。

关于c++ - C++ 中的静态成员和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com