著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:KE meng
链接:https://www.zhihu.com/question/19772701/answer/20426924
来源:知乎
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:KE meng
链接:https://www.zhihu.com/question/19772701/answer/20426924
来源:知乎
const_cast的用法不是将一个const变量变成非const变量的.看一下标准就可以知道,
使用const_cast把一个原本是const的变量转换为非const,这是一个未定义行为.
所以楼主所说const_castthis->.....是非常非常危险的举动.
const_cast的目的,在于某些变量原本不是const的,但由于某种特殊原因,无意间被变成了const的,
例如使用了一个const引用指向了一个本来不是const的对象.结果写了一些代码之后发现它实际上需要被修改. 这在平时的工作中不会遇到因为你可以直接把const引用修改成非const的,但C++中可能的情况太多,尤其考虑到很多复用的时候,有时还是会出现本不该是const的对象被const引用了这种情况.尤其是使用模板,比较复杂的情况.
这才是const_cast的意义所在.
想了解const_cast使用中可能出现的未定义行为,可参考如下代码:
int main()
{
const int k=10;
int& x=const_cast<int>(k);
x=11;
return k;
}
这段代码中出现的就是典型的const_cast的未定义行为,return的值是完全不确定的,全看编译器
心情.而以下代码是正确的:
int main()
{
int k=10;
const int& ref=k;
int& x=const_cast<int>(ref);
x=11;
return k;
}
使用const_cast把一个原本是const的变量转换为非const,这是一个未定义行为.
所以楼主所说const_castthis->.....是非常非常危险的举动.
const_cast的目的,在于某些变量原本不是const的,但由于某种特殊原因,无意间被变成了const的,
例如使用了一个const引用指向了一个本来不是const的对象.结果写了一些代码之后发现它实际上需要被修改. 这在平时的工作中不会遇到因为你可以直接把const引用修改成非const的,但C++中可能的情况太多,尤其考虑到很多复用的时候,有时还是会出现本不该是const的对象被const引用了这种情况.尤其是使用模板,比较复杂的情况.
这才是const_cast的意义所在.
想了解const_cast使用中可能出现的未定义行为,可参考如下代码:
int main()
{
const int k=10;
int& x=const_cast<int>(k);
x=11;
return k;
}
这段代码中出现的就是典型的const_cast的未定义行为,return的值是完全不确定的,全看编译器
心情.而以下代码是正确的:
int main()
{
int k=10;
const int& ref=k;
int& x=const_cast<int>(ref);
x=11;
return k;
}