C++,當類名和物件名稱相同時會發生什麼?
阿新 • • 發佈:2022-04-02
今天突發奇想,如果類名和由這個類宣告的物件識別符號相同時會發生什麼,然後就測試了一下。如下:
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;
}
|