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

时间:2014-10-07 00:45:13

标签: c++ pointers

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

5 个答案:

答案 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 *),您必须在需要取消引用或删除指针时告诉它类型,但这会导致不安全,不可读的代码。