C/C++ Constants

C/C++ Constants

本文关键字:Constants C++      更新时间:2023-10-16

可能的重复项:
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++还提供了删除变量constconst_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.