【发布时间】:2016-08-24 13:32:22
【问题描述】:
我了解在处理值时从 non-const 到 const 的隐式转换并不危险,例如:
int mutable = 5;
const int immutable = mutable;
但是,在使用指针时,我可以执行以下操作:
int some_number = 5;
int *mutable = &some_number;
const int *immutable = mutable; // <= Legal, but isn't it dangerous?
// Let's try to break const
printf("%d\n", *immutable); // Prints 5
mutable[0] = 10;
printf("%d\n", *immutable); // Prints 10
顺便说一句,对于双指针,这是不允许的(至少你会得到一个警告)!请参阅this 问题和其中的参考资料。
【问题讨论】:
-
常量指针的常见用例是作为函数参数。这告诉函数的用户(以及编译器)该函数不会改变指针指向的数据。
-
您的示例没有“破坏 const”,因为被修改的对象 (
some_number) 不是 const。在指针目标上使用 const 并不意味着“如果你读了两次就保证产生相同的值,中间还会发生一些其他的事情” -
将
const视为承诺。为什么有人要违背自己的诺言? -
您的代码中没有
const限定指针! -
@Olaf:这不是重点,而是基础价值的变化
标签: c pointers const-correctness