C/C++ Constants
C/C++ Constants
可能的重复项:
const int = int const?
这些关键字组合之间有什么区别?
const int*
int const*
int* const
是否可以通过使用指针访问常量地址来修改常量的值?
const int*
int const*
两者都声明指向常量类型的指针 int
。这意味着指针可以指向(保持(任何其他地址,但任何修改常量整数数据类型的尝试都将导致未定义行为。
int* const
声明指向int
类型的常量指针。这意味着指针不能被分配任何新地址,它将始终指向同一地址,但它指向的整数可以更改。
是否可以通过使用指针访问常量地址来修改常量的值?
是的,这是可能的,但它会导致一个格式错误的程序表现出未定义的行为。
一般来说:
const T === T const
和
const T * === T const *
但
T * const
使指针常量,但不一定是 T 的内容。
const T * const === T const * const
将使 T 的内容和指针本身都成为常量。
至于更改const
的内容:你应该不能,但编译器/操作系统/CPU 不会太努力地阻止你,所以你会得到俗称的"未定义行为",这是说"某些系统上随机崩溃"的好方法。
const int*
和 int const*
都是指向常量 int 的指针。这意味着指向的值不能更改,但指针本身可以更改。
第三个示例int *const
是指向 int 的常量指针。这意味着可以更改值,但指针不能更改。
的,您可以使用指针更改地址的值,但这样做是未定义的行为,应避免。 C++
还提供了删除变量const
性const_cast
。
如果您有任何其他与const
关键字相关的问题,您应该参考C++常见问题解答的常量正确性部分。
前两个是指向 const int 的变量指针。指针本身可以更改。如果不抛弃 const,int 就无法通过此指针进行更改。(但是,可以通过非常量引用对其进行修改。
最后一个是指向变量 int 的常量指针。如果不抛弃常量,指针本身就无法更改。可以通过指针更改 int。
这可能会有所帮助。这是另一个讨论将其分解的内容,以便您可以看到哪些部分在各种情况下变得const
。
Const绑定到左边。
除非它是最左边的子句,否则在绑定右边。
只需从右到左阅读
const int* => (const int)* => "pointer" to "const int"
=> Pointer can change.
=> Can't change the value it points at (the int is const)
int const* => (int const)* => "pointer" to "const int"
=> As above
int* const => int (* const) => "const pointer" to "int"
=> Can't change the pointer (its const) it always points
=> at the same things.
=> You can change the value of the object it points at.