我需要一个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应该有效,但它没有明显的语义解释.你知道为什么吗 ?
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)