我正在阅读一个C ++模板示例,模板签名的一部分使我感到困惑。
我是否正确阅读:
const T* const foo;
foo
是const*
到const T
吗?
答案 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
答案 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
尽管它是非法的,但我认为每个人都可以掌握其本质。