即使定义了用户定义的转换运算符,Static_cast也拒绝将指针强制转换到类 我正在学习C++的类型转换。我有这段代码 class Y { private: int m_y; }; class X { public: operator Y() { return Y(); } private: int m_x; }; int _tmain(int argc, _TCHAR* argv[]) { X x; Y y; y = static_cast<Y>(x); // calls the user defined conversion operator Y* yPtr; yPtr = static_cast<Y*>(&x); // error C2440: 'static_cast' : cannot convert from 'X *' to 'Y *'. // Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast } Y类 { 私人: 国际货币基金组织; }; X类 { 公众: 运算符Y(){return Y();} 私人: int m_x; }; int _tmain(int argc,_TCHAR*argv[] { X; Y; y=static_cast(x);//调用用户定义的转换运算符 Y*yPtr; yPtr=static_cast(&x);//错误C2440:“static_cast”:无法从“x*”转换为“Y*”。 //指向的类型是不相关的;转换需要重新解释类型转换、C样式转换或函数样式转换 } 为什么C++不返回一个使用对象定义的转换操作符从对象X转换为Y对象的指针?

即使定义了用户定义的转换运算符,Static_cast也拒绝将指针强制转换到类 我正在学习C++的类型转换。我有这段代码 class Y { private: int m_y; }; class X { public: operator Y() { return Y(); } private: int m_x; }; int _tmain(int argc, _TCHAR* argv[]) { X x; Y y; y = static_cast<Y>(x); // calls the user defined conversion operator Y* yPtr; yPtr = static_cast<Y*>(&x); // error C2440: 'static_cast' : cannot convert from 'X *' to 'Y *'. // Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast } Y类 { 私人: 国际货币基金组织; }; X类 { 公众: 运算符Y(){return Y();} 私人: int m_x; }; int _tmain(int argc,_TCHAR*argv[] { X; Y; y=static_cast(x);//调用用户定义的转换运算符 Y*yPtr; yPtr=static_cast(&x);//错误C2440:“static_cast”:无法从“x*”转换为“Y*”。 //指向的类型是不相关的;转换需要重新解释类型转换、C样式转换或函数样式转换 } 为什么C++不返回一个使用对象定义的转换操作符从对象X转换为Y对象的指针?,c++,C++,尽管给定类型的对象可以转换为另一种类型,但不一定要抛出指针。 在本例中,将X转换为Y表示“将此X转换为Y”。X不是Y,但它可以转换为一个 将X*转换为Y*表示“这是指向X的指针,现在我说它是指向Y的指针”。这是没有意义的,因为X不是Y,所以在转换对象之前不能将其视为一个对象。statc\u cast对对象进行强制转换是因为使用转换构造函数创建了对象的临时对象 但是当您static\u cast一个指针时,您正在创建指针的临时副本。指针没有转换构造函数 您不能将不相关的指针强制转换到另一个指针。即

尽管给定类型的对象可以转换为另一种类型,但不一定要抛出指针。

在本例中,将
X
转换为
Y
表示“将此
X
转换为
Y
”。
X
不是
Y
,但它可以转换为一个


X*
转换为
Y*
表示“这是指向
X
的指针,现在我说它是指向
Y
的指针”。这是没有意义的,因为
X
不是
Y
,所以在转换对象之前不能将其视为一个对象。

statc\u cast
对对象进行强制转换是因为使用转换构造函数创建了对象的临时对象

但是当您
static\u cast
一个指针时,您正在创建指针的临时副本。指针没有转换构造函数

您不能将不相关的指针强制转换到另一个指针。即使他们有转换构造函数也不行

即使是允许的,也要考虑如果它像STATION SCAPE对象那样工作会发生什么:使用转换构造函数创建一个临时变量,而不是将临时变量赋给一个变量,而是将临时地址分配给一个指针。但由于表达式后面不存在临时值,指针将立即指向无效内存