首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在C++中显式指定模板参数?

何时在C++中显式指定模板参数?
EN

Stack Overflow用户
提问于 2021-06-25 00:18:21
回答 1查看 107关注 0票数 2

在学习C++将近7个月的时间里,我一直好奇什么时候应该显式地指定模板参数,特别是函数模板。

std::forward就是一个这样的例子,应该提供类型模板参数(std::forward<Type>(arg))。

通常,模板参数是通过函数参数类型推导出来的,如:

代码语言:javascript
复制
template <typename T>
void lets_try(T x);

...

lets_try(5) // lets_try<int>(5);

或者,为了避免推导,我通常使用std::type_identity_t

代码语言:javascript
复制
template <typename T>
void lets_try(std::type_identity_t<T> x);

...

lets_try(5) // error
lets_try<int>(5) // ok

这是我仅有的一件事。

同样,我的问题是,何时应该显式指定模板参数?显式指定它们有什么好处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 00:31:09

什么时候应该显式指定模板参数?

当您实际需要显式地指定它们时。否则,只要有可能,就让编译器为您推断它们。

有时,您可能需要指定模板参数来解决歧义。

有时,您可能需要指定模板参数,以便在给定情况下使用特定类型/值,例如,当您需要一个与给定输入值不同(但与其可转换)不同的类型时(例如:当std::max<int64_t>(a, b)b是不同类型时使用std::max(),因为std::max()只有两个参数的一个模板参数)。

有时,您可能需要指定与任何函数参数无关的模板参数,因此无法推导。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68124022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档