2011-11-16 9 views
-1

C++では、これら2つの違いはありません。ので、C++にはポインタ型はありませんか?

char *pC; 
char* pC2; 

は私がタイプのcharcharが*は、異なるタイプであることを持っていると考え、すべてのC++プログラマは代わりのchar * pをこの形式ののchar * 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* pまたはchar *pが無関係であると言うかどうか。それらは3つの独立したトークンであり、あなたが望むようにそれらの間にいくつでもスペースを置くことができます。 pのタイプには影響しません。

pCAAAに初期化するとき、コンパイラはAAAから変換演算子を選択する必要があります。変数char*を初期化しているので、operator char*が必要です。そのようにするには、コンパイラはT = charを選択する必要があります。 Tcharあるので、方法はありませんT*char**である可能性があります。

Tをポインタ型にする場合は、char**のように、ポインタへのポインタ型が予想されるコンテキストでAAAを使用します。その後、Tchar*になります。

+0

ありがとうございます。私はこれに感謝します。 –

0

char* pまたはchar *pを書くことはまったく同じことです。どちらもcharへのポインタです。

関連する問題