重新解释强制转换为不同类型的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();时,是否打印a实例化Type1或编译器的数据成员正在动态更改函数?

在以下代码中类似。

#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; 
}  

如何打印“ A类”?自从我实例化B类以来?

人工编译器

您正在执行的操作是未定义的行为没有正确的答案。

在C ++中,使用由reinterpret_cast两种不相关的层次结构之间的类型产生的指针/引用是非法的-因此,不能推理由此产生的任何代码。

对于未定义的行为,编译器可以使用无效代码自由执行其希望的操作。在不同的编译器,优化级别和目标体系结构/系统之间,您所遇到的可能会有所不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重新解释无类型标识符的强制转换

来自分类Dev

重新解释无类型标识符的强制转换

来自分类Dev

为什么不为相同大小类型之间的类型转换重新解释强制强制copy_n?

来自分类Dev

C ++重新解释类型转换和C样式转换之间的区别

来自分类Dev

如何正确地将std :: vector <std :: vector <double>>强制转换为void *并重新解释回去?

来自分类Dev

常量和重新解释强制转换是否在编译时发生?

来自分类Dev

将接口转换为不同类型

来自分类Dev

重新解释将数组从字符串转换为整数

来自分类Dev

通过重新解释原始字节从一种类型的numpy数组转换为另一种

来自分类Dev

重新解释C中的演员

来自分类Dev

使用constexpr解决重新解释转换限制

来自分类Dev

静态并重新解释转换-定义的行为?

来自分类Dev

重新解释 std 字符串的 std 向量的转换

来自分类Dev

C ++ 11如何使用Lambda和高阶函数将向量转换为不同类型的向量

来自分类Dev

C ++临时将不同类型转换为字符串

来自分类Dev

在没有其他成员的情况下重新解释转换为派生类好吗?

来自分类Dev

将数组转换为不同类型(lodash / js)

来自分类Dev

将多维数组元素转换为不同类型

来自分类Dev

将更多列转换为不同类型

来自分类Dev

将不同类型的图像转换为PDF

来自分类Dev

在插入时将几何字段转换为不同类型?

来自分类Dev

是否可以将其转换为整个函数的不同类型

来自分类Dev

为什么允许将自身重新解释积分,枚举和成员指针类型重新解释?

来自分类Dev

重新解释内存/指针

来自分类Dev

重新解释终端输出

来自分类Dev

转换为相同类型

来自分类Dev

constexpr和带有重新解释强制转换的静态const void指针的初始化,哪个编译器正确?

来自分类Dev

C ++从类型'void *'强制转换为类型'double'

来自分类Dev

如何通过其他类型重新解释数据?(类型为punning混淆)

Related 相关文章

  1. 1

    重新解释无类型标识符的强制转换

  2. 2

    重新解释无类型标识符的强制转换

  3. 3

    为什么不为相同大小类型之间的类型转换重新解释强制强制copy_n?

  4. 4

    C ++重新解释类型转换和C样式转换之间的区别

  5. 5

    如何正确地将std :: vector <std :: vector <double>>强制转换为void *并重新解释回去?

  6. 6

    常量和重新解释强制转换是否在编译时发生?

  7. 7

    将接口转换为不同类型

  8. 8

    重新解释将数组从字符串转换为整数

  9. 9

    通过重新解释原始字节从一种类型的numpy数组转换为另一种

  10. 10

    重新解释C中的演员

  11. 11

    使用constexpr解决重新解释转换限制

  12. 12

    静态并重新解释转换-定义的行为?

  13. 13

    重新解释 std 字符串的 std 向量的转换

  14. 14

    C ++ 11如何使用Lambda和高阶函数将向量转换为不同类型的向量

  15. 15

    C ++临时将不同类型转换为字符串

  16. 16

    在没有其他成员的情况下重新解释转换为派生类好吗?

  17. 17

    将数组转换为不同类型(lodash / js)

  18. 18

    将多维数组元素转换为不同类型

  19. 19

    将更多列转换为不同类型

  20. 20

    将不同类型的图像转换为PDF

  21. 21

    在插入时将几何字段转换为不同类型?

  22. 22

    是否可以将其转换为整个函数的不同类型

  23. 23

    为什么允许将自身重新解释积分,枚举和成员指针类型重新解释?

  24. 24

    重新解释内存/指针

  25. 25

    重新解释终端输出

  26. 26

    转换为相同类型

  27. 27

    constexpr和带有重新解释强制转换的静态const void指针的初始化,哪个编译器正确?

  28. 28

    C ++从类型'void *'强制转换为类型'double'

  29. 29

    如何通过其他类型重新解释数据?(类型为punning混淆)

热门标签

归档