gpt4 book ai didi

c++ - C++中 `template`的含义是什么?

转载 作者:行者123 更新时间:2023-12-01 15:10:11 30 4
gpt4 key购买 nike

我已经阅读了一些有关图形的代码。但是我对C++中的模板有疑问。

typedef int intT;

template <class intT>
struct edge {
intT u;
intT v;
edge(intT f, intT s) : u(f), v(s) {}
};

template <class intT>
struct edgeArray {
edge<intT>* E;
intT numRows;
intT numCols;
intT nonZeros;
void del() {free(E);}
edgeArray(edge<intT> *EE, int r, int c, int nz) :
E(EE), numRows(r), numCols(c), nonZeros(nz) {}
edgeArray() {}
};
该代码等于
struct edge {
int u;
int v;
edge(int f, int s) : u(f), v(s) {}
};

...
为何此代码中的 template<class int>template<class T=int>template<class int>有什么区别? intT有两种,一种是 typedef int intT,另一种是 template< class intT>intT的范围是不同的?

更新:
模板参数的名称在其自身的持续时间内对外部作用域隐藏相同的名称:
typedef int N;
template< N X, // non-type parameter of type int
typename N, // scope of this N begins, scope of ::N interrupted
template<N Y> class T // N here is the template parameter, not int
> struct A;
https://en.cppreference.com/w/cpp/language/scope

最佳答案

And why is the template<class int> in this code ?


我们只能在这里猜测。可能有人设计了 edgeedgeArray来保存 int类型的值(内置 int!),然后想要使用模板来代替,并通过命名模板参数 int来认为它很聪明。但是,令人惊讶的是,由于 int是关键字,因此无法编译。

what is the difference between template<class T=int> and template<class int> ?

template<class T=int>  
声明一个带有一个名为 T的模板参数的模板,该模板参数默认为 int。这意味着您可以省略template参数,默认情况下它将变为 int
template<class int>
另一方面,用一个名为 int的模板参数声明一个模板。如上所述,这不会编译。

关于c++ - C++中 `template<class int>`的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63609341/

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