本文介绍了为什么复制构造函数在通过const引用传递临时时被调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我传递一个未命名的临时对象到使用const ref参数定义的函数。类的复制ctor是私有的,我得到编译错误。我不明白为什么在这种情况下调用复制构造函数。
class A {
public:
A(int i){}
private:
A(const A&){}
};
void f(const A& a)
{
}
int main()
{
f 1)); //< - error here:'A :: A(const A&)'is private
}
b $ b
正如预期的那样,当我将主要更改为:
A a
f(a);
它可以工作。
编译器是gcc 4.1.2
解决方案
你可以在或直接转到
I am passing an unnamed temporary object to a function defined with const ref parameter. The copy ctor of the class is private, and I get a compilation error. I don't understand why a copy constructor is called in this situation.
class A {
public:
A(int i) {}
private:
A(const A&) {}
};
void f(const A& a)
{
}
int main()
{
f(A(1)); // <-- error here: 'A::A(const A&)' is private
}
As expected, when I change the main to:
A a(1);
f(a);
it works.
EDIT: the compiler is gcc 4.1.2
解决方案
You can find the answer to your question in Copy Constructor Needed with temp object. or go directly to http://gcc.gnu.org/bugs/#cxx%5Frvalbind
这篇关于为什么复制构造函数在通过const引用传递临时时被调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!