在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;
}
提前致谢!
答案 0 :(得分:5)
char
和char*
是不同的类型,这是正确的。程序员是否说char* p
或char *p
是无关紧要的。这是三个独立的标记,它们之间可以有多少个空格,如你所愿;它对p
的类型没有影响。
使用pC
初始化AAA
时,编译器需要从AAA
中选择转换运算符。由于它正在初始化char*
变量,因此需要operator char*
。为了实现这一目标,编译器需要选择T = char
。由于T
为char
,因此T*
无法char**
。
如果希望T
成为指针类型,则在期望指针指针类型的上下文中使用AAA
,例如char**
。然后T
将为char*
。
答案 1 :(得分:0)
写char* p
或char *p
也是一回事,都指向char
。