- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 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 ofC
, 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 constructorC()
.- 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/
我是一名优秀的程序员,十分优秀!