【发布时间】:2020-08-22 08:45:36
【问题描述】:
今天让我震惊的是,这段代码 sn-p 有一个模棱两可的名称引用:
class A
{
private:
typedef int Type;
};
class B
{
public:
typedef int Type;
};
class D : A, B
{
Type value;//error: reference to 'Type' is ambiguous
};
嗯!想象一下,您是 A 类的作者,并且您的类已经被不同的人和不同的项目到处使用。有一天你决定重写你的A 类。这是否意味着你不能在你的新类中使用任何新的(甚至是私有的)名称而不破坏其他人的代码?
这里的约定是什么?
【问题讨论】:
-
pimpl 成语,让你不再需要更改私有接口。
-
C++ 程序的语义不受
public/private声明的影响。但他们的合法性是。如果它是第一次编译,将private更改为public应该不会破坏它。
标签: c++ inheritance private base ambiguity