模板的术语
Templates terminology
本文关键字:术语 更新时间:2023-10-16
template <typename T> void quark(T&& t) {
}
前面的代码有这样的解释:
调用
quark(up)
时,执行模板实参推导。quark()
是一个带有模板形参T的函数模板,但是我们没有提供一个显式的模板实参(看起来像quark<X>(up)
)。相反,可以通过比较函数形参类型T&&
与函数实参类型(字符串类型的左值)来推导模板实参。
谁能告诉我谁是谁在模板参数,模板参数,函数参数,函数参数?
参数和实参之间的区别可能是函数声明中写的类型参数和实参是实际传递给函数的实体?但是函数和模板args/pars之间的区别我甚至无法想象。
模板形参是T,模板实参是调用quark(up)时碰巧推导出的T。
函数形参为t,函数实参为up
模板参数为T
。模板参数为实际类型,即T
的值。
考虑这个,
template<typename T, typename U>
void f(T a, U b);
f<int,char>(10, 'A`);
这里T
和U
是模板形参,int
和char
是模板实参。因为它是一个函数模板,你也可以分别说函数模板形参和函数模板实参。
, a
、b
为函数形参,10
、'A'
为函数实参。
还要注意,在某些情况下函数模板参数可以由编译器推导出来:
f(10, 'A'); //template arguments can be deduced from 10 and 'A'
从函数参数10
推导出T
为int
,从'A'
推导出U
为char
。
有趣的区别是,有时编译器可以推断出函数模板参数,但它永远不能推断出函数参数!
相关文章:
- 临时对象:术语澄清
- std::bind 和 std::函数术语不值为接受 0 个参数?
- 我想在C++代码中比较这三个术语
- 理解一个特定的C++代码块及其术语
- 术语的计算结果不是采用0个参数的函数
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- C++,术语,非规范,阻塞,检测消息结束
- 具有成员的类的术语
- 术语不计算为函数采用 1 个参数错误?
- 将用户输入的术语与 txt 文件中的列表进行比较
- "overriding"非虚拟方法的官方术语
- 超载 =具有多个术语的运算符
- C++:术语的计算结果不是采用 1 个参数的函数
- Visual Studio,找不到初始化术语,无法再调试
- 无法将术语添加到列出的列表类中
- C2064:术语未评估为1个参数qtConcurrent :: map的函数
- 术语差异的模型
- 为什么在提到 prvalue 时,它在这里使用术语"object"?
- 提升线程:术语的计算结果不为 0 个参数
- 了解模板元编程概念和术语