C ++没有指针类型吗?

时间:2011-11-16 04:46:31

标签: c++ templates pointers

在C ++中,这两者没有区别。

char *pC;
char* pC2;

我认为类型 char char * 必须是不同的类型,并且所有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;
}

提前致谢!

2 个答案:

答案 0 :(得分:5)

charchar*是不同的类型,这是正确的。程序员是否说char* pchar *p是无关紧要的。这是三个独立的标记,它们之间可以有多少个空格,如你所愿;它对p的类型没有影响。

使用pC初始化AAA时,编译器需要从AAA中选择转换运算符。由于它正在初始化char*变量,因此需要operator char*。为了实现这一目标,编译器需要选择T = char。由于Tchar,因此T*无法char**

如果希望T成为指针类型,则在期望指针指针类型的上下文中使用AAA,例如char**。然后T将为char*

答案 1 :(得分:0)

char* pchar *p也是一回事,都指向char