我需要使用整数作为对象

Geo*_*tis 1 c++

我需要一个int类型(或类似的)并附加到它的方法.

所以我正在使用:

struct INT{
    int i;
    operator int(){return i;};
    int operator=(int v){return i=v;}
    void p(){std::cout<<"i="<<i<<std::endl;}
};

int main(int argc, char **argv)
{

INT X;
int i=8;

X=5;

int j=X+i;
X=j;

(*reinterpret_cast<INT*>(&i)).p();

reinterpret_cast<INT>(i).p();

X.p();

}
Run Code Online (Sandbox Code Playgroud)

虽然第二种形式的reinterpret_cast应该有效,但它没有明显的语义解释.你知道为什么吗 ?

T.C*_*.C. 5

reinterpret_cast主要用于执行危险的指针转换.当你真正知道自己在做什么时使用它,而不仅仅是关闭编译器.

int *指向an转换int为an INT *并尝试调用其成员函数INT会导致未定义的行为.符合标准的编译器可以自由生成代码,从而改变您的硬盘驱动器.

执行此操作的正确方法是使用static_cast转换构造函数INT:

struct INT{
    INT(int i_ = 0) : i(i_) { }  // defines implicit conversion
    int i;
    operator int(){return i;};
    int operator=(int v){return i=v;}
    void p(){std::cout<<"i="<<i<<std::endl;}
};

int main(int argc, char **argv)
{

    INT X;
    int i=8;

    static_cast<INT>(i).p();

    X.p();    
}
Run Code Online (Sandbox Code Playgroud)