2011-11-16 44 views
-1

在C++中,這兩個沒有區別。C++沒有指針類型嗎?

char *pC; 
char* pC2; 

我以爲型焦炭的char *都必須是不同類型和所有的C++程序員不得不用這種形式的char * P的代替字符* P,因爲當你做char * p它似乎沒有指定程序員正在使用指向char的指針。

但是,當您查看下面的代碼(與C++ 0x中的nullptr相同)​​時,T似乎無法識別任何指針類型。

const class{ 
public: 
    // T is char, not char* in this case. 
    // T* is char*, but I thought it would be char** 
    template <class T> 
    operator T*() const{ 
     cout << "Operator T*() Called" << endl; 
     return 0; 
    } 

    template <class C, class T> 
    operator T C::*() const{ 
     cout << "Operator C T::*() Called" << endl; 
     return 0; 
    } 

private: 
    void operator&() const; 
}AAA = {}; 

int main(){ 
// operator T*() const is called, 
// but it's awkward, 
// because it looks like T will be char* type, so T* will be char** 
    char* pC = AAA; 
} 

在此先感謝!

+0

你的問題是什麼? – Beta

+5

問題標題是無稽之談。顯然C++有指針類型,而且你知道它。 –

回答

5

你是正確的,charchar*是不同的類型。程序員是否說char* pchar *p是無關緊要的。這些是三個獨立的標記,並且它們之間可以有多少個或多個空間。它對p的類型沒有影響。

當您使用AAA初始化pC時,編譯器需要從AAA中選擇一個轉換運算符。由於它初始化一個char*變量,它想要operator char*。爲了做到這一點,編譯器需要選擇T = char。由於Tchar,因此T*可能不是char**

如果您希望T爲指針類型,則在需要指針指針類型的上下文中使用AAA,例如char**。然後T將是char*

+0

謝謝。我很欣賞這個。 –

0

寫作char* pchar *p是一樣的東西,都是指向char