C++;const:为什么编译器没有';I don’我不会给出警告/错误 关于C++常态的一个简单问题。< /P>

C++;const:为什么编译器没有';I don’我不会给出警告/错误 关于C++常态的一个简单问题。< /P>,c++,constants,C++,Constants,所以我在读这篇文章,然后我尝试了以下代码: int some_num = 5; const int* some_num_ptr = &some_num; 为什么编译器没有给出错误或至少是警告 按照我阅读上述声明的方式,它说: Create a pointer that points to a constant integer 但是有些数值不是一个常量整数——它只是一个整数。问题在于如何读取代码。它实际上应该是 创建指向无法通过指针修改值的整数的指针 < C++ >代码> const

所以我在读这篇文章,然后我尝试了以下代码:

int some_num = 5;
const int* some_num_ptr = &some_num;
为什么编译器没有给出错误或至少是警告

按照我阅读上述声明的方式,它说:

Create a pointer that points to a constant integer

但是有些数值不是一个常量整数——它只是一个整数。

问题在于如何读取代码。它实际上应该是

创建指向无法通过指针修改值的整数的指针


< C++ >代码> const int */COD>不能保证<代码> int >代码是常数。它只是一个工具,使通过指针修改原始值变得更加困难,我同意。另外,请查看

const关键字只是告诉编译器您需要对变量进行更严格的检查。 将非常量整数转换为常量整数指针是有效的,它只会告诉编译器,如果您试图更改常量指针内容的值,它会给出一个错误

换句话说,写作

*some_num_ptr = 6;
应该给出一个错误,因为指针指向常量int

书写

some_num = 7;

当然仍然有效。

int*ptr
只是说您不能通过
ptr
更改
ptr
指向的值。实际值仍可能通过其他方式更改

(编译器没有发出警告的实际原因是从t*到const t*的强制转换是隐式的)

->帮助我一下子理解了:)