指向指向法线变量的常量的指针
pointer to a constant pointing to normal variable
char var = 'a';
const char *ptr;
ptr = &var;
*ptr = 'b'; //(i understand this is wrong)
var = 'b'; // (why is this wrong)
我无法更改"var"的值。 这是否意味着我已经通过将"var"的声明分配给此指针(指向常量的指针)将"var"的声明从 char 更改为 const char。所以规则不应该是指向常量的指针应该只有常量变量的地址吗?提前谢谢。
我无法更改"var"的值。
是的,你可以。你在最后的陈述中这样做,var = 'b';
这是否意味着我已经将"var"的声明从
char
更改为const char
不。 var
是,一直都是,将来也永远是一个可变的char
。
所以规则不应该是指向常量的指针应该只有常量变量的地址吗?
不。指针到常量的唯一特别之处在于,您无法通过此特定指针更改指向的对象。完全有可能以其他方式更改对象,就像您展示自己一样,只要对象本身是可变的。
这是理解正在发生的事情的另一种方法:
- 存在一个对象,它是一个可变的
char
。 - 在计算 id-expression
var
时,将获得一个char
类型的可修改左值,该左值指定该对象。通俗地说,您可以说"对象具有名称"var
"。 - 当你计算表达式
*ptr
时,你会得到一个类型为const char
的(不可修改的)左值,它也指定了我们在 (1) 中提到的同一对象。
可以指定同一对象,也就是说,有很多方法可以将对象称为某种表达式的值。有时这些值是可变的,有时它们是不可变的。(只有当对象本身是常量时,才不允许通过可变值修改它;但通常很难获得指定常量对象的可变值——你需要像 const_cast
这样的东西,或者在 C 中限定符丢弃强制转换。
这行没有错:
var = 'b'; // (why is this wrong)
你的编译器抱怨过吗? 我的没有。
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- 为什么我收到"从常量指针到指针的转换无效?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 为什么C++中没有常量引用,就像常量指针一样?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 将常量指针强制转换为非常量
- 带有常量指针的矢量构造函数示例
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 常量指针上的混乱
- 使用 static_cast 时指向常量指针的原因
- 如何在C++中定义常量指针数组?
- 测试此指针的常量指针性质
- 当常量指针用作函数的参数时
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 在不同类型之间转换常量指针
- 解构常量指针?
- 为什么 std::vector<>::const_reference 可以转换为非常量指针?