【发布时间】:2018-05-11 12:57:10
【问题描述】:
template <typename T> struct A {
A(T);
A(const A&);
};
int main()
{
A x(42); // #1
A y = x; // #2
}
据我了解,#1 的T 将使用隐式演绎指南进行演绎
从第一个 ctor 生成。然后 x 将使用该 ctor 进行初始化。
不过,对于#2,T 将使用复制推导候选来推导(据我所知,这是推导指南的一个特定情况)(然后 y 将使用第二个 ctor 初始化)。
为什么不能使用从 copy-ctor 生成的(隐式)推导指南来推导 #2 的 T?
我想我只是不明白复制扣除候选人的一般用途。
【问题讨论】:
-
不确定您期望什么或不理解什么。
x和y是A<int>。 -
@Jarod42 该问题询问确定
y是A<int>的过程,提供了两种不同的确定方法,并询问为什么一种方法还不够。 -
如果 #2 使用 A::A(T),我们最终会得到 y beeing A>。因此必须首选 A(const A&)。
-
对于#2 through,T 将使用复制推演候选项推演你是怎么得到的?
-
“为什么不能使用从 copy-ctor 生成的(隐式)推导指南推导出 #2 的 T?” 您应该提供一个示例来说明行为。我试过this,但它有效。
标签: c++ templates c++17 template-argument-deduction