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

时间:2011-11-25 22:00:55

标签: c++ pointers const

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

我是否正确阅读:

const T* const foo;

fooconst*const T吗?

8 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分: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声明常量指针

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

这也与T const * const array

相同

请参阅wiki on const correctness

答案 4 :(得分:0)

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

答案 5 :(得分:0)


const T*
至少,就const而言,

制作数组foo的元素。

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

const

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

foo = &some_array;

变量

foo

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

答案 6 :(得分:0)

是的,它只是意味着您不仅无法更改foo指向的内容,而且还无法更改foo本身的值,以便指向其他T {1}}实例。

答案 7 :(得分:0)

像这样简单地解析

const<ptr<const<T>>> foo

尽管它是非法的,但我认为每个人都可以掌握其本质。