const_cast<type-id>(expression)

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//**********************//
类类型
class  B{
     public :
         int  m_num;
         B():m_num(50){}
};                                                                                                                                     
void  foo( void ) {
 
     const  B* b1 =  new  B();
     B* b2 =  const_cast <B*>(b1);
     b2->m_num = 200;
     cout << "b1:"  << b1->m_num << endl; //200
     cout << "b2:"  << b2->m_num << endl; //200
 
 
     const  B b3;
     B b4 =  const_cast <B&>(b3);
     b4.m_num = 300;
     cout <<  "b3:"  << b3.m_num << endl; //50
     cout <<  "b4:"  << b4.m_num << endl; //300
}
//************************//
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//************************//
基本类型
void  foo(){
     const  int  a = 100;
     int * p1 =  const_cast < int *>(&a);
     *p1 = 200;
     cout << *p1 << endl; //200
     cout << a << endl; //100
 
     const  int * p2 =  new  int (100);
     int * p3 =  const_cast < int *>(p2);
     *p3 = 200;
     cout << *p2 << endl; //200                                                   
     cout << *p3 << endl; //200
}
//************************//

你会发现:

A:可以为基本类型或者类类型;

const A a;随便怎么修改a都不会变化

const A* p = new A();去掉p的const属性后,*p就变化了.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//*****************//
class  A{
     public :                                                                     
         A(){
             m_num=1;
         }   
         int  m_num;
};
void  foo ( void ){
     A a;
     const  A &r = a;
     A a1 =  const_cast <A&>(a);
     a1.m_num = 200;
     cout << a1.m_num << endl; //200
     cout << a.m_num << endl; //1
}
//****************//



const_cast<type-id>(expression)中,type-id只能为指针或引用,其他的都错,这个表达式即可以去除

expression中的const属性或volatil属性,还能增加const属性或者volatil属性

const int i = 10;

int i1 = const_cast<int>(i) //错误


增加const属性与volatil属性相反.


本文转自神ge 51CTO博客,原文链接:http://blog.51cto.com/12218412/1867169

相关文章
|
7月前
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
59 1
|
7月前
|
安全 程序员 C++
C++中的类型查询:探索typeid和type_info
C++中的类型查询:探索typeid和type_info
80 1
|
Java
【ES异常】mapper [sortNum] of different type, current_type [long], merged_type [keyword]
【ES异常】mapper [sortNum] of different type, current_type [long], merged_type [keyword]
161 0
|
8月前
|
人工智能 安全 机器人
【C++】const_cast基本用法(详细讲解)
【C++】const_cast基本用法(详细讲解)
137 0
|
安全 C++ 编译器
static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 何时发生隐式类型转换 在下面这些情况下,编译器会自动地转换运算对象的类型: 在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型 在条件中,非布尔值转换为布尔类型 ...
1152 0
TypeError: sequence item 0: expected string, int found
TypeError: sequence item 0: expected string, int found
【TP5.1】variable type error: array
【TP5.1】variable type error: array
195 0
【TP5.1】variable type error: array
|
XML Java 数据库连接
Open quote is expected for attribute "{1}" associated with an element type "id".
Open quote is expected for attribute "{1}" associated with an element type "id".
210 0
Open quote is expected for attribute "{1}" associated with an element type "id".