【发布时间】:2011-06-11 15:09:53
【问题描述】:
我将一个未命名的临时对象传递给使用 const ref 参数定义的函数。类的复制 ctor 是私有的,我得到一个编译错误。我不明白为什么在这种情况下调用复制构造函数。
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
}
不出所料,当我将 main 更改为:
A a(1);
f(a);
它有效。
编辑:编译器是 gcc 4.1.2
【问题讨论】:
-
你使用的是哪个编译器?
-
VC++9 很乐意编译第一个变体。
-
@sharptooth: gcc,我会更新
-
@davka:gcc?哪个版本? gcc-4.3.4 编译得很好:ideone.com/7sZ17
标签: c++ gcc pass-by-reference copy-constructor