gpt4 book ai didi

c++ - 提供显式演绎指南是否会禁用隐式演绎指南的生成/形成

转载 作者:行者123 更新时间:2023-12-05 00:51:19 30 4
gpt4 key购买 nike

我正在阅读 deduction guides在 C++17 中。假设我们有以下示例:

template<typename T> struct Custom 
{

};
template<typename T> struct Person
{
Person(Custom<T> const&);
Person(Custom<T>&&);
};
template<typename T> Person(Custom<T>) -> Person<T>; //explicitly declared deduction guide

我的问题是显式推导指南的显式声明(如上所示)禁用 2个隐式推导指南的形成(对应于类模板的2个ctor Person ),如果我们没有指定明确的推导指南,就会出现这种情况。我的意思是,假设在上面的例子中,没有显式的推导,那么就会有2个隐式的推导(对应Person的两个构造函数)。但是在我们添加了显式引导之后,我们是总共有1个推导引导(我们用户明确声明)还是3个推导引导(包括2个隐式推导引导)。

PS:请注意,问题只是关于 Person 的推导指南,而不是关于是否会为 Custom 形成隐式指南。

最佳答案

不,deduction-guide 声明不会在类模板参数推导过程中抑制隐式推导指南的形成。重载集将包含两者。见 [over.match.class.deduct]/1 :

... a set of functions and function templates, called the guides of C, is formed comprising:

  • If C is defined, for each constructor of C, a function template with the following properties: ...
  • If C is not defined or does not declare any constructors, an additional function template derived as above from a hypothetical constructor C().
  • An additional function template derived as above from a hypothetical constructor C(C), called the copy deduction candidate.
  • For each deduction-guide, a function or function template with the following properties: ...

[additional provisions related to aggregates omitted...]

但是,重载解决过程中倒数第三个决胜局将 deduction-guides(,显式声明的演绎指南)优先于隐式演绎指南。 [over.match.best.general]/2.10 .只有在尝试了所有更一般的决胜局(与演绎指南没有直接关系)之后才能达到此决胜局。

关于c++ - 提供显式演绎指南是否会禁用隐式演绎指南的生成/形成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72175198/

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