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

标签 c++ memory

<分区>

我正在学习一门非常有趣的 CE 类(class)和一门 C++ 类(class)。在 CE 中,我对内存的工作原理有了更深入的了解。那么,为什么我们需要在c++中显式声明指针类型呢?指针只是一个(或多个)存储单元,用于保存数据类型的地址;虽然数据类型显然需要不同的内存分配,但为什么需要指针呢?也就是,如果指针类型都具有相同的内容(内存地址),为什么不能在 C++ 中对其进行泛化?

最佳答案

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

如果语言不知道 int*MyClass* 之间的区别,那么您可能会不小心分配一个 int*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
}

关于c++ - 为什么我们需要在 C++ 中显式声明指针类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219070/

相关文章:

c++ - 在 C++ 中共享底层状态

c++ - 在编译时重复到已知N的std::tuple

c++ - 强制先尝试一个过载,然后再返回另一个

iphone - 为什么在调试过程中会收到有关从远程iOS设备读取Xcode框架文件的警告?

android - 在内部存储器中创建文件夹以保存文件并在以后检索它们

c++ - 如何使用 SFINAE 从 C++11 中的多个选项中选择构造函数

c++ - 程序显示 program.exe 在启动后大约 4 秒停止工作

c++ - 在用 delete 释放的对象的析构函数中使用 free

java - OutOfMemoryError 异常 : Java heap space, 如何调试...?

c - 我最喜欢的段错误!!为什么?