背後的原因是什麼,我們不能在一個類中聲明和定義一個變量(屬性),而這個變量(屬性)和類本身的名字相同?例如,這代碼是不正確的(至少在MS VC++):具有相同類名的變量?
class test{
public:
int test;
};
背後的原因是什麼,我們不能在一個類中聲明和定義一個變量(屬性),而這個變量(屬性)和類本身的名字相同?例如,這代碼是不正確的(至少在MS VC++):具有相同類名的變量?
class test{
public:
int test;
};
你的代碼是合法的,如果MS VC++說,否則它是錯誤的。
在C++ 11,9.2/16:
另外,如果類T具有一個用戶聲明的構造(12.1),T級的每 非靜態數據成員應有一個名字與T不同。
您的類沒有用戶聲明的構造函數,並且您定義的數據成員是非靜態的,因此它可以命名爲test
。如果它是靜態的,則9.2/15表示它不能被命名爲test
,但9.2/15對非靜態數據成員沒有提及。
在C++ 03中,它是9.2/13和/ 13a,規則是相同的。
如果MS VC++發出警告,那麼這可能是合理的。數據成員對C程序員的影響比C++程序員更有意義:
struct test{
void foo(test &a) { // "test" is a type here
struct test t; // "test is not a type here, "struct test" is
a = t;
}
int test;
};
struct test{
int test;
void foo(struct test &a) { // now "test" is not a type here either
struct test t;
a = t;
}
};
謝謝,我試圖找到:) –
構造函數的類的名字。
構造函數是一種方法,我正在談論一個屬性。 – Aan
奇怪的是,構造函數沒有名稱(12.1),但它們仍然可以影響名稱空間中爲什麼用途保留的名稱。我不知道動機是什麼。 –
這是猜測,但也許對於這種情況?這不是一個明智的做法。 –
感謝您的注意。 – Aan