從ISO/IEC 14882:2003(E)9.1.2 -
一個類的定義介紹了類名字進入其中它被定義並隱藏任何類,對象,功能,或其他聲明的範圍這個名字在封閉的範圍內(3.3)。如果在聲明同名對象,函數或枚舉器的作用域中聲明瞭類名,那麼當兩個聲明都在作用域中時,該類只能使用詳細類型說明符來引用( 3.4.4)。
[實施例:
struct stat {
// ...
};
stat gstat; // use plain stat to
// define variable
int stat(struct stat*); // redeclare stat as function
void f() {
struct stat* ps; stat(ps); // struct prefix needed
// to name struct stat
// ...
}
末端示例]
3.3.7名稱隱藏
2所述的類名(9.1)或枚舉名稱(7.2)可以通過在同一範圍內聲明的對象,函數或枚舉的名稱來隱藏。如果類或枚舉名稱和對象,函數或枚舉器在相同的作用域(以任何順序)中聲明具有相同的名稱,則無論對象,函數或枚舉器名稱是否可見,都將隱藏類或枚舉名稱。
與標準的報價,所有這些說法都是正確的。
class ABC{};
class abc{}; // abc and ABC are two different character sequences for the
// class entity. And similar is the case for next two function
// entities.
int ABC(){}
int abc(){}
int main(){
int abc; // abc and ABC are two different character sequences.
char ABC;
}
最後..explain任何其他東西..是我離開?
兩者的功能ABC(), abc()
應該返回int
,它們不這樣做雖然:)
'INT ABC(); int abc();'實際上不是非法的。它只是重新宣佈相同的功能。 (這種重新聲明很容易發生在前向聲明中。) – UncleBens 2011-03-23 22:15:52