簡體   English   中英

使用聲明的類或枚舉

[英]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::sA::e ,即使它們分別被成員和枚舉器隱藏。

請注意, using-declaration還將成員和枚舉器納入范圍,因此類和枚舉仍然隱藏在B的范圍內; 這意味着要在B或其他地方使用它們,我們需要使用structenum標記。

在下面的代碼中, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM