如果指针的大小都相同,那么我们为什么要声明它们指向的对象类型呢?

Sha*_*ane 2 c++ pointers

C++是否强制执行此操作只是因为它使代码更具可读性?

Sco*_*ter 8

如果你想要ptr->field对编译器有任何意义的语句,它需要知道指针指向的是什么.


cdh*_*wie 7

不必声明指针指向的对象类型.这就是指向void(void *)类型的指针 - 指向未知类型的对象的指针.

当然,如果你不知道对象的类型,那么你就不能用它做任何有用的事情,这就是为什么C++不会让你用指针到void做很多事情,除非在指针到void的地方使用它是预期的,或将其转换为另一种指针类型.

您还可以指向不完整的类型:

class Something;

Something * somethingPtr = nullptr;
Run Code Online (Sandbox Code Playgroud)

现在我们有一个指向类型对象的指针Something,但我们对该类型一无所知,因此我们无法对目标对象执行任何操作:

// error: invalid use of incomplete type ‘class Something’
somethingPtr->foo();
Run Code Online (Sandbox Code Playgroud)