簡體   English   中英

將對象的顯式類型轉換為int *

[英]Explicit type casting of object to int *

以下c ++代碼的輸出是什么?

#include<iostream> 
using namespace std;
class IndiaBix
{
    int x, y; 
    public:
    IndiaBix(int xx)
    {
        x = ++xx;
    } 
    ~IndiaBix()
    {
        cout<< x - 1 << " ";
    }
    void Display()
    {
        cout<< --x + 1 << " ";
    } 
};
int main()
{
    IndiaBix objBix(5);
    objBix.Display();
    int *p = (int*) &objBix;
    *p = 40;
    objBix.Display();
    return 0; 
}

我不明白以下一行::

 int *p = (int*) &objBix;//Explicit type cast of a class object to integer pointer type

可以將對象指針(標准布局類型)轉換為指向其第一個成員的指針。 這是因為可以保證標准布局對象的第一個成員與整個對象具有相同的地址:

9.2班級成員[class.mem]

20 - 指向標准布局結構對象的指針,使用reinterpret_cast進行適當轉換,指向其初始成員(或者如果該成員是位字段,則指向它所在的單元),反之亦然。

因此int *p = (int*) &objBix; 是一個指向objBix.x的指針,因為objBix是標准布局; 它的數據成員xy都是private ,並且該類沒有virtual方法或基類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM