const-pointer-to-type, pointer-to-const以及讨论const的术语

const-pointer-to-type, pointer-to-const and terminology for const discussion

本文关键字:const 术语 pointer-to-const const-pointer-to-type      更新时间:2023-10-16

我相信我已经找到了很多人似乎对const感到困惑的部分原因,那就是术语"const指针"似乎有点违反直觉的命名法,因为当说(即使是那些理解微妙之处的人)时,似乎通常是指"指向const的指针"或:

  const Type * foo;
然而,当没有解析时,先验的约定知识(例如:const指针",在术语"const指针"中,人们可能会解析为"const"限定了"指针",因此期望它表示"const指针到类型"或:
  Type * const foo;

我的问题是:

  1. 是"const指针"接受术语"const Type *"尽管看似是一个用词不当?
  2. 如果是,讨论中提到的"常量指针指向类型"或"Type * const"的常规术语是什么?

是的,const Type* foo通常被称为const指针。

这种类型的常量之所以有一个名字,是因为这种类型的常量比另一种更具粘性。如果得到指向const对象的指针,则不能将其转换为非const对象。但是如果你得到一个本身是const的指针,但是指向一个可变对象,你总是可以把它复制到一个可写字段。

最后,指向const的指针表示指向对象是const。它不是,它可以改变,你只是有一个对象的只读视图。从这个意义上说,constness更适用于指针而不是对象本身。

是的-通常"const指针"是指指向const对象的指针,而不是指向const对象的指针,可能是因为第一种情况更常见,所以可以理解为它分配较短的形式。

通常对于const-pointer-to-type,您要么直接说,要么坚持使用指示符:T* const。很少讨论这样的指针,因此据我所知,它没有特别常见的表达式。

const是一个所谓的限定符。

在const类型* var的情况下,这意味着type的值是const,所以它被称为const(ant) type指针。

在类型* const var的情况下,它意味着var的值是const,因此它被称为类型指针 const(ant)。

注意两者之间的细微差别