首页 > 编程语言 >C++ const_cast用法

C++ const_cast用法

时间:2023-06-14 22:12:46浏览次数:61  
标签:const int C++ cast 去除 type

原文
C++ 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 = 1;
    int *p;
    p = const_cast<int*>(&a);
    (*p)++;
    cout<<a<<endl;
    cout<<*p<<endl;
    
}
void ConstTest2(){
    int i=3;
    const int a = i;
    int &r = const_cast<int &>(a);
    r++;
    cout<<a<<endl;
}
int main(){
    ConstTest1();
    ConstTest2();
    return 0;
}

输出:
1
2
4
解释为什么输出4:

当常变量为 const int a =i 时,直接输出j时,编译器不能进行优化,也就是不能够直接用i代替a;

当常变量为const int a =5时,直接输出a时,编译器会进行优化,也就是用文字常量5直接代替a;

 

https://zhuanlan.zhihu.com/p/369369830

 

标签:const,int,C++,cast,去除,type
From: https://www.cnblogs.com/im18620660608/p/17481485.html

相关文章

  • [C++/PTA] 有序数组(类模板)
    题目要求实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0,1,2或3:为0时表示输入结束;为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量......
  • [C++/PTA] 2017Final 圆周率山
    题目要求为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。已知圆周率为:3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253......
  • [C++/PTA] 类的定义和使用
    题目要求定义一个日期类Date,内有数据成员年、月、日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断。编写主函数:创建日期对象,计算并输出该日是该年的第几天。输入:每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。输出:该日是该年的......
  • [C++/PTA] 立方体类的实现
    题目要求立方体类Box的实现,完成计算体积、计算表面积、输出结果等功能。其中给定的主函数为:intmain(){floatab;cin>>ab;Boxobj;obj.seta(ab);obj.getvolume();obj.getarea();obj.disp();return0;}输入格式:立方体的边......
  • [C++/PTA] 汽车收费
    题目要求现在要开发一个系统,管理对多种汽车的收费工作。给出下面的一个基类框架classVehicle{protected:stringNO;//编号public:virtualvoiddisplay()=0;//输出应收费用}以Vehicle为基类,构建出Car、Truck和Bus三个类。Car的收费公式为:载客数8+重量2Truck的收费......
  • [C++/PTA] 计算时间相减
    题目要求题目描述:定义一个时间类,小时和分钟是其两个私有成员数据。输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计算这两个时间相隔多少分钟。说明:这两个时间在同一天之内,且采用24小时计时分式,即从00:00-23:59。输入格式:测试输入包含若干测......
  • [C++/PTA] 括号匹配
    题目要求给定仅包含()[]{}六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。输入格式:第一行一个整数T(T<=10)其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内)输出格式:对于每个字符串,匹配输出Yes,否则输出No......
  • c++的常量折叠
    一,前言有关C++语言的const常量的考察点:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配区是很普通的栈或者全局区域。也就是说const常量只是编译器在编译的时候做检查,根本不存在什么read-only的区域。所以说C++的const常量和常量字符串是不同的,常量字符......
  • [C++/PTA] 办事大厅排队
    题目要求在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。输入格式:第一行一个数字N,表示排队信息或者查询信息条目的数量。以下N行,每行的内容有以下3种情况(1)inname表示名字为name的人员新来到办事大厅,排在......
  • 从C++mutex到futex
    从std::mutex到futex机制我原本出发点是C++std::mutex的实现原理,但是经过一番查阅,发现C++std::mutex是对glibc-nptl库pthread_mutex的封装;而nptl库在用户态完成了futex机制的一部分;最后在以linux为内核的操作系统中,又提供了futex系统调用给glibc-nptl给与底层支撑。因此本文先......