gpt4 book ai didi

c++ - C 样式转换是否添加程序集(代码)或仅供编译器了解情况?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:41 25 4
gpt4 key购买 nike

Class A 
{
public:

A *GetA(void) { return a; }

protected:

A *a;

};

Class B : public A
{
public:

B *GetB(void) { return (B*)a; }

};

在 A 类中,我假设编译器(理想情况下)将优化 getter 并将其内联到与直接访问变量没有区别的代码中?

在 B 类中,变量被强制转换为 B。这纯粹是为了编译器还是这也涉及代码?B 中的函数的汇编指令是否相同?

最佳答案

大多数转换不插入任何汇编指令,但是也有异常(exception):

  1. 对有符号整数进行扩展转换:转换插入符号扩展指令以保留负值的值。

  2. 与浮点类型之间的转换:这些转换执行完全转换,它们不会重新解释位。因此,计算机必须做一些事情。

  3. 具有多重继承的指针转换。虽然第一个基数始终是对象中的第一个成员,但第二个基数不能。因此,将 Derived* 转换为 SecondBase* 将调整指针,向代码添加加法指令。

关于c++ - C 样式转换是否添加程序集(代码)或仅供编译器了解情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com