C++提供了四个转换运算符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++提供了四个转换运算符相关的知识,希望对你有一定的参考价值。
- const_cast <new_type> (expression)
- static_cast <new_type> (expression)
- reinterpret_cast <new_type> (expression)
- dynamic_cast <new_type> (expression)
它们有着相同的结构,看起来像是模板方法。这些方法就是提供给开发者用来进行指针和引用的转换的。
1、const_cast用法
const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除)。
变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。
用法:const_cast<type>(expression)
通过const_cast运算符,也只能将const type*转换为type*,将const type&转换为type&。
也就是说源类型和目标类型除了const属性不同,其他地方完全相同。
#include<iostream> using namespace std; void ConstTest1(){ const int a = 5; int *p; p = const_cast<int*>(&a); (*p)++; cout<<a<<endl; cout<<*p<<endl; } void ConstTest2(){ int i; cout<<"please input a integer:"; cin>>i; const int a = i; int &r = const_cast<int &>(a); r++; cout<<a<<endl; } int main(){ ConstTest1(); ConstTest2(); return 0; } 输出: 5 6 若输入7 则输出8
解释为什么输出8:
当常变量为 const int j =i 时,直接输出j时,编译器不能进行优化,也就是不能够直接用i代替j;
当常变量为const int j =5时,直接输出j时,编译器会进行优化,也就是用文字常量5直接代替j;
以上是关于C++提供了四个转换运算符的主要内容,如果未能解决你的问题,请参考以下文章