在 C++ 中,为什么需要提及指针的类型?

Roh*_*an 1 c++ pointers dereference c++-concepts

在 C++ 中,需要提及指针的类型。例如,

int a = 5;
int * p = &a;
Run Code Online (Sandbox Code Playgroud)

这里,'int *' 中的'int' 是必要的。我发现的原因是它需要取消引用。(知道要读取的字节数及其解释)和指针算术。

但是,如果我写:-

int a = 5;
char * p = &a;
float * p2 = &a;
//etc
Run Code Online (Sandbox Code Playgroud)

显示错误,说明无法将 char*、float* 等指针分配给 int 变量。好的..,所以编译器知道我想要指针的变量类型。这与普通变量不同,在普通变量中,编译器并不确切知道我想要哪种类型。例如:-

int a = 5;
float b = 5;
double c = 5;
long d = 5;
char e = 5;
Run Code Online (Sandbox Code Playgroud)

所有这些都很好。我需要在这里写类型,因为编译器不知道我想要哪种类型,因为所有这些都可以工作。

但是,在指针的情况下,它知道我要为其声明指针的变量的确切类型。

即使我使用显式类型转换,我仍然以某种方式告诉我需要的指针类型,并且仍然必须指定正确的指针类型。

int a = 5;
char * b = (char*)&a;//This would work.
//However this,
int * b = (char*)&a;
//wouldn't, as even with typecasting, c++ knows exactly the type of pointer we need.
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,当 C++ 知道我要指向的变量类型时,为什么不自动设置指针的类型?当它可以在不使用正确类型的指针时出错,为什么不自动设置它?

Lou*_*nco 8

如果声明bauto,编译器将使用类型推断并确定类型本身。但是,如果您使用特定类型,则它必须是正确的类型。