reinterpret_cast是C++中使用的一种强制转换运算符。
- 它用于转换任何类型的另一种指针的一个指针,而不管该类是否相互关联。
- 它不检查指针类型和指针所指向的数据是否相同。
句法 :
data_type *var_name =
reinterpret_cast (pointer_variable);
退货类型
- 它没有任何返回类型。它只是转换指针类型。
参数
- 它仅采用一个参数,即源指针变量(上例中为p)。
// CPP program to demonstrate working of
// reinterpret_cast
#include
using namespace std;
int main()
{
int* p = new int(65);
char* ch = reinterpret_cast(p);
cout << *p << endl;
cout << *ch << endl;
cout << p << endl;
cout << ch << endl;
return 0;
}
输出:
65
A
0x1609c20
A
使用reinterpret_cast的目的
- reinterpret_cast是一种非常特别且危险的类型转换运算符。并且建议使用适当的数据类型来使用它,即(指针数据类型应与原始数据类型相同)。
- 它可以将任何指针类型转换为任何其他数据类型。
- 当我们要使用位时使用它。
- 如果我们使用这种类型的演员表,那么它将变成不可携带的产品。因此,除非必要,否则建议不要使用此概念。
- 它仅用于将任何指针转换为其原始类型。
- 布尔值将转换为整数值,即0表示false,1表示true。
// CPP code to illustrate using structure
#include
using namespace std;
// creating structure mystruct
struct mystruct {
int x;
int y;
char c;
bool b;
};
int main()
{
mystruct s;
// Assigning values
s.x = 5;
s.y = 10;
s.c = 'a';
s.b = true;
// data type must be same during casting
// as that of original
// converting the pointer of 's' to,
// pointer of int type in 'p'.
int* p = reinterpret_cast(&s);
cout << sizeof(s) << endl;
// printing the value currently pointed by *p
cout << *p << endl;
// incrementing the pointer by 1
p++;
// printing the next integer value
cout << *p << endl;
p++;
// we are casting back char * pointed
// by p using char *ch.
char* ch = reinterpret_cast(p);
// printing the character value
// pointed by (*ch)
cout << *ch << endl;
ch++;
/* since, (*ch) now points to boolean value,
so it is required to access the value using
same type conversion.so, we have used
data type of *n to be bool. */
bool* n = reinterpret_cast(ch);
cout << *n << endl;
// we can also use this line of code to
// print the value pointed by (*ch).
cout << *(reinterpret_cast(ch));
return 0;
}
输出:
12
5
10
a
1
1
程序2
// CPP code to illustrate the pointer reinterpret
#include
using namespace std;
class A {
public:
void fun_a()
{
cout << " In class A\n";
}
};
class B {
public:
void fun_b()
{
cout << " In class B\n";
}
};
int main()
{
// creating object of class B
B* x = new B();
// converting the pointer to object
// referenced of class B to class A
A* new_a = reinterpret_cast(x);
// accessing the function of class A
new_a->fun_a();
return 0;
}
输出:
In class A
相关链接:
https://www.geeksforgeeks.org/casting-operators-in-c-set-1-const_cast/
https://stackoverflow.com/questions/573294/when-to-use-reinterpret-cast” rel =“ noopener” target =“ _ blank
http://forums.codeguru.com/showthread。 PHP的?482227-reinterpret_cast-lt-gt和在哪里可以使用
https://www.ibm.com/support/knowledgecenter/zh-CN/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/keyword_reinterpret_cast.htm
https://stackoverflow.com/questions/573294/when-to-use-reinterpret-cast
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。