抱歉,标题过于模糊(由于缺乏英语技能)。请建议一个更好的标题。为什么复制构造函数没有被调用?
请考虑下面的代码。
struct A {
typedef std::vector<double> State;
// template <class... Args>
// A(Args... args)
// : a(args...)
// {}
template <class... Args>
A(Args&&... args)
: a(std::forward<Args>(args)...)
{}
A(const A&) = default;
A(A&&) = default;
State a;
};
int main(){
A a(3,2);
A b = a; // This line triggers an error!!
}
的gcc 4.8.0失败,出现错误信息 error: no matching function for call to 'std::vector<double>::vector(A&)' : a(std::forward<Args>(args)...)
编译它。
我不明白为什么这段代码是错误的。在我看来,编译器应该调用行A b = a;
中的拷贝构造函数。
但是,如果我通过注释的(它只是取值)替换构造函数。它编译。此外,现在不需要默认复制(和移动)构造函数的行。 这里发生了什么?
哦,我明白了。感谢您的明确解释。:) – Sungmin