我在 C++ 标准中读到的关于注入类名的内容与我将很快介绍的示例程序的行为相矛盾(如我所见)。这是我读到的:
从 3.4(第 3 段)
出于名称隐藏和查找的目的,类的注入类名称(第 9 条)也被认为是该类的成员。
从 9 开始(第 2 段)
类名被插入到在看到类名之后立即声明它的作用域中。类名也被插入到类本身的范围内;这被称为注入类名。出于访问检查的目的,注入的类名被视为公共成员名。
从这些我了解到,以下是一个格式良好的翻译单元,它编译成功。
#include <vector>
class X: std::vector<int>
{
vector mem;
};
但是,我认为以下应该产生错误,但它没有
#include <vector>
class X: std::vector<int>, std::vector<char>
{
vector mem; //compiles OK... mem is apparently std::vector<int>
};
由于名称vector
被注入到两者中std::vector<int>
并且std::vector<char>
好像是一个公共成员名称,那么它应该被 X 继承,因此vector
in 中的名称X
应该是模棱两可的。我错过了什么吗?
PS我正在使用MSVC9.0