const T*const是什么意思

What does `const T* const` mean?

本文关键字:const 意思 是什么      更新时间:2023-10-16

我正在阅读一个C++模板示例,模板签名的一部分让我感到困惑

我读对了吗:

const T* const foo;

fooconst*还是const T

是的,它是一个指向常量T的常量指针。也就是说,你既不能修改指针,也不能修改它指向的东西。

const T*只会禁止您修改指针指向的任何内容,但它允许您(在语言的范围内(检查*(foo+1)*(foo-1)处的值。当您将指针传递到不可变数组(例如您只应该读取的C字符串(时,请使用此表单。

T * const意味着您可以修改foo指向的T值,但不能修改指针本身;所以不能说foo++; (*foo)++,因为第一个语句会增加(修改(指针。

T *将为您提供完全的自由:您可以获得一个指向数组的指针,并且可以检查和修改该数组的任何成员。

是;这正是它的意思。

由于在使用指针时,const总是有一点混乱,因此存在以下可能性:

  • const T * aConstant

    意味着CCD_ 15是指向CCD_ 16的变量指针

  • T const * aConstant

    做的完全一样。

  • T * const aConstant

    声明CCD_ 19是指向CCD_。

  • T const * const aConstant(或const T * const aConstant(

    声明一个指向constant T常量指针

这是一个指向常量T的常量指针。因此,如果T是一个int,那么数组是指向一个以两种方式为常量的int的指针:

指向const的指针:指针指向的值不能更改(或指向const int(const指针:指针中存储的内存地址无法更改

这也与T const * const array 相同

请参阅有关常量正确性的wiki。

是的,foo是指向常量T的常量指针。

是。


const T*

使得阵列的元素CCD_ 25。。。至少就foo而言。

foo[0] = T(); // Illegal!
foo[1] = T(); // Illegal!
foo[2] = whatever; // Illegal!

const

使CCD_ 27成为恒定指针。因此,这是非法的:

foo = &some_array;

可变

foo

如果你不知道这是什么,你应该认真考虑去幼儿园。

是的,我认为var(const(的名称会让你感到困惑。

是的,这只是简单地意味着不仅不能更改foo指向的内容,而且不能更改foo本身的值,使其指向其他T实例。

只需像这样解析

const<ptr<const<T>>> foo

虽然它是违法的,但我认为每个人都能抓住它的本质。