C样式转换是否会添加程序集(代码),还是仅供编译器了解情况?

Pet*_*ter 1 c++ class c++builder

Class A 
{
public:

A *GetA(void) { return a; }

protected:

A *a;

};

Class B : public A
{
public:

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

};
Run Code Online (Sandbox Code Playgroud)

在AI类中,假设编译器(理想情况下)将优化并将getter内联到与直接访问变量无关的代码?

在B类中,变量被转换为B.这纯粹是为了编译器还是这也涉及到代码?对于B中的功能,汇编指令是否相同?

Mat*_*lia 5

对于任何明智的编译器,在单继承的情况下,指针类型的更改只会影响编译器元数据 - 代码将是相同的 -,但请记住,在多重继承的情况下,强制转换为一个基类或另一个基类可能为指针提供不同的值。

本系列深入探讨实现的具体细节,您可能会发现它很有趣。


cma*_*ter 5

大多数强制转换都不会插入任何汇编程序指令,但也有例外情况:

  1. 扩展有符号整数的强制转换:强制转换插入符号扩展指令以保留负值的值.

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

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