簡體   English   中英

范圍解析運算符的評估

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

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