今天让我震惊的是,这段代码片段有一个模棱两可的名称引用:
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
类的作者并且您的类(class)已经被不同的人和不同的项目到处使用。有一天你决定重写你的 A
类(class)。这是否意味着你不能在你的新类中使用任何新的(甚至是私有(private)的)名称而不破坏其他人的代码?这里的约定是什么?
最佳答案
是的你是对的。如果您决定稍后进行更改,使用当前的格式/逻辑/编码风格可能会破坏其他人的代码。
尝试使用 PIMPL 或完全限定符号。
你的例子是一个很好的例子,为什么不使用完全限定符号不是一个好主意。
与以下代码相同的问题:
using namespace std;
上面的代码行可能会破坏很多东西。
关于C++:如何防止私有(private)名称污染派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61651280/