1. 程式人生 > 其它 >C++,當類名和物件名稱相同時會發生什麼?

C++,當類名和物件名稱相同時會發生什麼?

今天突發奇想,如果類名和由這個類宣告的物件識別符號相同時會發生什麼,然後就測試了一下。如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 #include <iostream> using namespace std; class a { public: a() {cout << "a~~~~~" << endl;} }; int main(void) {     a a;           return 0; }

  正常編譯通過,執行結果也是正常的。仔細想想這種結果也是意料之中的,因為在main函式體中剛開始的時候遇到第一個a,由於main區域性域沒有a的宣告,所以繼續向外面的全域性域尋找,接著找到a的宣告,並解析a是一個類,之後遇到第二個a,這時這個a成了一個型別為a的物件,此聲明後區域性域中的a已經隱藏了全域性域中的a,如若繼續寫a b;

肯定會報錯,如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> using namespace std; class a { public: a() {cout << "a~~~~~" << endl;} }; int main(void) {     a a;     a b;       return 0; }

  這次是肯定無法編譯通過的。如果再想訪問全域性的那個a只能用域操作符了(::a),如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> using namespace std; class a { public: a() {cout << "a~~~~~" << endl;} }; int main(void) {     a a;     //a b;     ::a b;     return 0; }

原文連結:https://www.cnblogs.com/xxNote/p/4183328.html