[英]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.