`const T * const`是什么意思?

问题描述 投票:6回答:8

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

我是否正确阅读:

const T* const foo;

fooconst*const T吗?

c++ pointers const
8个回答
10
投票

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

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

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

T *会给你完全的自由:你得到一个指向数组的指针,你可以检查和修改该数组的任何成员。


2
投票

是;这正是它的意思。

由于在使用指针时总是对const有点混淆,因此有以下几种可能性:

  • const T * aConstant 意味着aConstant是指向constant T的变量指针。
  • T const * aConstant 完全一样。
  • T * const aConstant 声明aConstant是一个指向variable T和。的常量指针。
  • T const * const aConstant(或const T * const aConstant) 声明一个指向constant T的常量指针。

1
投票

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


1
投票

这是一个const指针到const T.所以如果T是一个int,那么数组是一个指向int的指针,它是两种方式的const:

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

这也和T const * const array一样

wiki on const correctness


0
投票

是的,我认为var(const)的名字是你的绊脚石。


0
投票

是的,它只是意味着你不仅不能改变foo指向的东西,而且你也无法改变foo本身的值,以便它指向其他一些T实例。


0
投票

是。


const T*

至少,就const而言,制作数组foo的元素。

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

const

使foo成为一个常量指针。因此,这是非法的:

foo = &some_array;

变量

foo

......如果你不知道这是什么,你应该认真考虑去学前班。


0
投票

只需像这样解析它

const<ptr<const<T>>> foo

虽然这是违法的,但我认为每个人都可以掌握其本质。

© www.soinside.com 2019 - 2024. All rights reserved.