我正在阅读一个C++模板示例,其中一部分模板签名让我感到困惑。
我是否正确地理解了这个:
const T* const foo;
< p > foo
是指向 const T
的 const*
吗?
我正在阅读一个C++模板示例,其中一部分模板签名让我感到困惑。
我是否正确地理解了这个:
const T* const foo;
< p > foo
是指向 const T
的 const*
吗?
是的,它是一个指向常量 T
的常量指针,也就是说,您既不能修改指针,也不能修改它所指向的内容。
const T*
只会禁止您修改指针所指向的任何内容,但它允许您(在语言的范围内)检查 *(foo+1)
和 *(foo-1)
处的值。当您传递指向不可变数组的指针(例如只能读取的 C 字符串)时,请使用此形式。
T * const
意味着您可以修改 foo
指向的 T
值,但您无法修改指针本身;因此,您不能说 foo++; (*foo)++
,因为第一个语句将增加(修改)指针。
T *
将为您提供完全的自由:您获得一个指向数组的指针,并且可以检查和修改该数组的任何成员。
T * const
。从右往左读,表示指向 T
的常量指针。你可以修改它所指向的值,但不能修改指针本身,因此无法修改相邻的内存部分。 - Fred Foo(*foo) +1
在任何情况下都是允许的。但是当值为 const
时,(*foo)++
是不允许的(无论指针是否为 const
)。 - Fred FooT *const foo
,添加 (*foo)+1
是允许的,因为它只产生一个值(而不是变量!),而 (*foo)++
将修改 foo
指向的值;该值已被声明为 const
。 - Fred Foo是的,这正是它的意思。
由于在使用指针时,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
的不变指针。
指向常量:指针指向的值不能被更改(或者指向const int) 常量指针:指针中存储的内存地址不能更改
这也可以写成 T const * const array
是的,foo是一个指向常量T的常量指针。
是的。
const T*
将数组的元素设置为const
... 至少在foo
方面是如此。
foo[0] = T(); // Illegal!
foo[1] = T(); // Illegal!
foo[2] = whatever; // Illegal!
const
将foo
变为常量指针。因此,以下操作是非法的:
foo = &some_array;
变量
foo
如果你不知道这是什么,你应该认真考虑去上幼儿园。
是的,我认为变量(const)的名称让你感到困惑。
是的,它的意思很简单,不仅你不能改变 foo
指向的东西,还不能将 foo
的值本身更改为指向其他的 T
实例。
只需像这样简单地解析它
const<ptr<const<T>>> foo
虽然这是非法的,但我认为每个人都可以掌握其实质。