gpt4 book ai didi

c++ - 带空尖括号 <> 的模板函数调用

转载 作者:IT老高 更新时间:2023-10-28 22:36:47 25 4
gpt4 key购买 nike

我对下面的模板行为感到困惑,因为在语法上,模板<> 被保留以标记显式模板特化,因此它可以使用空尖括号(不带参数的模板)很好地编译。

template <typename T> void add(T a, T b) { }
int main() {
add<>(10, 3); // compiles fine since both parameters are of same data type
add<>(10, 3.2); // Error: no matching function for call to add(int, double)
}

在上述情况下,模板参数真的是可选的吗?

最佳答案

template<> is reserved to mark an explicit template specialization.

这意味着不同的东西,取决于上下文。这里它的意思是“使用默认或推导的参数”,就像你简单地说 add .

在第一种情况下,两个函数参数具有相同的类型,因此模板参数可以推导出为int .

在第二种情况下,它们有不同的类型,所以不能推导出模板参数。你必须指定你想要的,例如add<double> ,转换一个函数参数以匹配另一个,或修改模板以分别参数化每种类型。

In the above case is the template parameter really optional?

是的,如果它可以从参数类型中推断出来的话。

关于c++ - 带空尖括号 <> 的模板函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398587/

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