例如,为什么下列代码是非法的:char *s1 = 0;const char *s2 = s1; // OK... char *a[MAX]; // aka char ** const char **ps = a; // error!*pc = 'C'; // would allow to modify a const object 忽略代码并回答问题的原则,请参阅comp.lang.c常见问题中的以下条目:
#include <iostream>usingnamespacestd;intmain(){constinta=5;constint*p=&a;int*p_var=NULL;p_var=const_cast<int*>(p);//强转为非const指针cout<<a<<endl;*p_var=10;//重新赋值cout<<"*p="<<*p<<endl;//输出10cout<<"*p_var="<<*p_var<<endl;//输出10cout<<"a="<<a<<endl;//输出...
之后编译器就想试试可不可以把const 迭代器引用转换为非const迭代器引用(隐式类型转换),这肯定是语法不允许的,这属于权限的放大,自然就报了一个不能转换为非const迭代器的报错了。 解决方案: 了解了报错原因,我们只需要提供一份const GetIterator就好了。 EOF...
常量转换用于去掉表达式的const属性,使其变成非常量表达式。常量转换不能改变表达式的类型,只能改变const属性。 4. 重解释转换(reinterpret_cast)。 重解释转换用于进行各种类型之间的强制转换,包括指针、引用、整数之间的转换。它是一种非常危险的类型转换,因为它会改变数据的原本含义。