[英]The evaluation of a scope resolution operator
這可能是一個愚蠢的問題。
我注意到我們將作用域解析運算符::
用於名稱空間和靜態成員函數。
1) std::printf("foo");
2) MyClass::foo();
這是我的問題:
1. C ++編譯器如何區分它們?
2. C ++編譯器看到作用域解析運算符時,其處理過程是什么?
詳細信息在C ++規范的3.4.3合格名稱查找中(帶有3.3.1聲明性區域和范圍以及5.1.1(主表達式)常規也提供了一些有用的信息。)
歸根結底,盡管名稱空間和類都是“聲明性區域”,所以在您的示例中, std::cout
引用了聲明性區域std
的名稱cout
,而MyClass::foo
引用了聲明性區域中的名稱foo
。名為MyClass
聲明性區域。 就::
操作符而言,名稱空間和類是“同一種東西”。
此外,由於名稱在聲明性區域(包括全局名稱空間)內必須唯一,因此以下代碼無效:
//invalid code - does not compile
namespace test { int x; }
class test { static int x; };
換句話說,在test::x
引用命名空間中的x或類中的x之間沒有歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.