重新解释为不同类型的 C++
Reinterpret cast to different type C++
在阅读 Reinterpret cast 时,我检查了以下代码。
class Type1 {
public:
Type1() {
a = "Class Type 1";
}
void get1()
{
std::cout << a;
}
private:
std::string a;
};
class Type2 {
public:
Type2() {
b = "class Type 2";
}
void get2()
{
std::cout << b;
}
private:
std::string b;
};
int main()
{
Type1* type1 = new Type1();
//converting Pointer
Type2* type2 = reinterpret_cast<Type2*>(type1);
// accessing the function of class A
type2->get2();
}
在 运行 下面的代码之后它在控制台中打印 "Class Type 1"
现在 type1
是 Type1
类型的指针,我将其转换为 Type2
并存储在 type2
中。
现在,当我调用 type2->get2();
时,它是打印实例化 Type1
的数据成员 a
还是编译器正在动态更改函数?
与以下代码类似。
#include <iostream>
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<A*>(x);
// accessing the function of class A
new_a->fun_a();
return 0;
}
如何打印“In class A”?因为我实例化了 Class B ?
您正在做的是未定义的行为。没有正确答案。
在 C++ 中,在两种类型的不相关层次结构之间使用 reinterpret_cast
所产生的 pointer/reference 是非法的——因此,从此类生成的任何代码都无法进行推理。
对于未定义的行为,编译器可以自由地对无效代码执行它希望的操作。您遇到的情况可能会因编译器、优化级别和目标不同而有所不同 architecture/system.
您在代码中使用了转换 reinterpret_cast
这种转换只是告诉编译器考虑指向不同的类型,而不考虑类型。
reinterpret_cast 是C++中最不注意目的和源数据排列的非法转换。它只是将值从一种类型转换为另一种类型。
在阅读 Reinterpret cast 时,我检查了以下代码。
class Type1 {
public:
Type1() {
a = "Class Type 1";
}
void get1()
{
std::cout << a;
}
private:
std::string a;
};
class Type2 {
public:
Type2() {
b = "class Type 2";
}
void get2()
{
std::cout << b;
}
private:
std::string b;
};
int main()
{
Type1* type1 = new Type1();
//converting Pointer
Type2* type2 = reinterpret_cast<Type2*>(type1);
// accessing the function of class A
type2->get2();
}
在 运行 下面的代码之后它在控制台中打印 "Class Type 1"
现在 type1
是 Type1
类型的指针,我将其转换为 Type2
并存储在 type2
中。
现在,当我调用 type2->get2();
时,它是打印实例化 Type1
的数据成员 a
还是编译器正在动态更改函数?
与以下代码类似。
#include <iostream>
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<A*>(x);
// accessing the function of class A
new_a->fun_a();
return 0;
}
如何打印“In class A”?因为我实例化了 Class B ?
您正在做的是未定义的行为。没有正确答案。
在 C++ 中,在两种类型的不相关层次结构之间使用 reinterpret_cast
所产生的 pointer/reference 是非法的——因此,从此类生成的任何代码都无法进行推理。
对于未定义的行为,编译器可以自由地对无效代码执行它希望的操作。您遇到的情况可能会因编译器、优化级别和目标不同而有所不同 architecture/system.
您在代码中使用了转换 reinterpret_cast
这种转换只是告诉编译器考虑指向不同的类型,而不考虑类型。 reinterpret_cast 是C++中最不注意目的和源数据排列的非法转换。它只是将值从一种类型转换为另一种类型。