【发布时间】:2010-10-10 11:56:41
【问题描述】:
考虑以下代码:
class A
{
friend class B;
friend class C;
};
class B: virtual private A
{
};
class C: private B
{
};
int main()
{
C x; //OK default constructor generated by compiler
C y = x; //compiler error: copy-constructor unavailable in C
y = x; //compiler error: assignment operator unavailable in C
}
MSVC9.0(Visual Studio 2008 的 C++ 编译器)确实会生成默认构造函数,但无法为 C 生成复制和赋值运算符,尽管 C 是 A 的朋友。这是预期的行为还是 Microsoft漏洞?我认为是后者,如果我是对的,任何人都可以指出一篇文章/论坛/...讨论这个问题或微软对这个错误做出反应的地方。提前谢谢你。
附:顺便说一句,如果将两个私有继承都更改为受保护,则一切正常
附言我需要一个证明,上面的代码是合法的还是非法的。据我了解,确实打算不能派生具有虚拟私有基础的类。但他们似乎错过了朋友部分。所以……就这样吧,我的第一个赏金:)
【问题讨论】:
-
@YeenFei:虽然很有用的帖子(谢谢)这绝对不是重复的,因为这里有朋友关心。
标签: c++ visual-studio-2008 friend virtual-inheritance default-copy-constructor