[英]Class or enumeration using declaration
N3797的3.4.3.1/1开头说:
如果qualified-id的nested-name-specifier指定一个类,则在类(10.2)的范围内查找在嵌套名称说明符之后指定的名称,但下面列出的情况除外。
其中一条规则是:
查找using-declaration(7.3.3)中指定的名称还会查找隐藏在同一范围内的类或枚举名称(3.3.10)。
你能举例说明这条规则吗?
我相信这是标准提供的:
struct A {
struct s {} s;
enum e { e };
};
struct B: A {
using A::s;
using A::e;
};
struct B::s s2;
enum B::e e2;
B
范围内的using声明引入了类和枚举名称A::s
和A::e
,即使它们分别被成员和枚举器隐藏。
请注意, using-declaration还将成员和枚举器纳入范围,因此类和枚举仍然隐藏在B
的范围内; 这意味着要在B
或其他地方使用它们,我们需要使用struct
和enum
标记。
在下面的代码中, B::m_s
隐藏了C
A::m_s
。 但是可以通过using A::m_s
直接访问它。
要查看差异,请注释using-directive。
#include <iostream>
#include <string>
struct A {
std::string m_s;
A() :
m_s("I am A::m_s")
{}
};
struct B: A {
std::string m_s;
B() :
m_s("I am B::m_s")
{}
};
struct C: B {
using A::m_s;
};
int main() {
C c;
std::cout << '\n' << c.C::m_s << '\n';
}
/*
Local Variables:
compile-command: "g++ -g test.cc -o a.exe && ./a.exe"
End:
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.