【发布时间】:2012-06-28 15:23:15
【问题描述】:
所以基本上这段代码:
class A {
};
class B {
B (const B& b) {}
public:
B (){}
B (const A& a) {}
};
int main()
{
A a;
B b1(a); //OK
B b2 = a; //Error
}
只会为B b2 = a 生成错误。而那个错误是
错误:'B::B(const B&)' 是私有的
为什么除了直接转换构造函数外还要调用复制构造函数?
从错误消息中可以清楚地看出,创建了一个临时的B,然后将其用于复制构造,但为什么呢?这在标准中的什么地方?
【问题讨论】:
-
您的问题是否与this one 相关? :)
-
因为我在几分钟前已经复习过这个问题 :)
-
所以要清楚,您是在问为什么 compiler 会这样做(即您想要复制初始化定义的标准参考),还是在问为什么标准正在这样做(即你想要那个定义的动机)?
-
@SteveJessop 我首先要求提供参考,但动机也很高兴知道(不会发布新问题,因为它可能会被删除)。
-
@SteveJessop 公平。我认为 Jesse 对 Als 回答的评论是一个可能的解释。
标签: c++ copy-constructor