为什么我们需要在c ++中显式声明指针类型?

Mic*_*l W 0 c++ memory

我正在学习一门非常有趣的CE课程和C++课程.在CE中,我对内存如何工作有了更深入的了解.那么,为什么我们需要在c ++中显式声明指针类型?指针只是一个存储单元(或多个单元),它将地址保存到数据类型; 虽然数据类型显然需要不同的内存分配,为什么要指针?AKA,为什么指针类型不能在C++中泛化,如果它们都拥有相同的东西,内存地址?

Chr*_*ckl 7

因为使用C++的主要原因之一是类型安全.

如果语言不知道a int*和a 之间的区别MyClass*,那么您可能会意外地将int*a 分配给a MyClass*,并且程序的运行时行为将是未定义的.C++中的目标是让编译器检测到这样的错误,如果没有不同的指针类型,这是不可能的.

struct MyClass
{
    double d;
};

void f(MyClass* ptr)
{
    ptr->d = 1.0;
}

int main()
{
    int i = 0;
    f(&i); // error detected at compile time
}
Run Code Online (Sandbox Code Playgroud)