C ++是否只强制执行此操作,因为它使代码更具可读性?
答案 0 :(得分:8)
如果你想让ptr->field
之类的语句对编译器有意义,那就需要知道指针指向的是什么。
答案 1 :(得分:7)
你不必须声明指针所指向的对象类型。这就是指向void(void *
)类型的指针 - 指向未知类型对象的指针。
当然,如果你不知道对象的类型,那么你就无法对它做任何有用的事情,这就是为什么C ++不会让你做一个指向void的指针,除非使用它其中指向void的指针,或将其转换为另一种指针类型。
您还可以指向不完整类型:
class Something;
Something * somethingPtr = nullptr;
现在我们有一个指向Something
类型对象的指针,但我们对该类型一无所知,因此我们无法对目标对象执行任何操作:
// error: invalid use of incomplete type ‘class Something’
somethingPtr->foo();
答案 2 :(得分:1)
如果你有:
struct foo
{
int bar;
int baz;
};
foo* myFoo = new foo;
如果你甚至不能告诉myFoo->bar
有一个myFoo
字段,你会怎么做bar
?
答案 3 :(得分:1)
或者以somePtr [i]或*(somePtr [i])为例,其中i乘以对象大小(以字节为单位)或somePtr ++,其中somePtr有效地增加了对象大小。
答案 4 :(得分:0)
它使代码更具可读性,但更重要的是它使代码更安全。
您可以想象一些语法(如void *),您必须在需要取消引用或删除指针时告诉它类型,但这会导致不安全,不可读的代码。