C++类型铸造
请参阅以下代码:C++类型铸造,c++,casting,C++,Casting,请参阅以下代码: void simple_dynamic_casts( ) { AB ab; B* bp = (B*)&ab; // cast needed to break protection A* ap = &ab; // public derivation, no cast needed AB& abr = dynamic_cast<AB&>(*bp); // succeeds ap = dyn
void simple_dynamic_casts( )
{
AB ab;
B* bp = (B*)&ab; // cast needed to break protection
A* ap = &ab; // public derivation, no cast needed
AB& abr = dynamic_cast<AB&>(*bp); // succeeds
ap = dynamic_cast<A*>(bp); assert( ap != NULL );
bp = dynamic_cast<B*>(ap); assert( bp == NULL );
ap = dynamic_cast<A*>(&abr); assert( ap != NULL );
bp = dynamic_cast<B*>(&abr); assert( bp == NULL );
}
为什么代码在这里使用动态强制转换。我没有尝试编译此代码。是。指向类的指针始终可以隐式转换为指向公共基类的指针;在本例中,您将从AB*转换为A*。允许动态_强制转换,但不是必需的 这与第二次转换A*ap=&ab;没有什么不同
代码使用动态转换来说明其工作原理。是。指向类的指针始终可以隐式转换为指向公共基类的指针;在本例中,您将从AB*转换为A*。允许动态_强制转换,但不是必需的 这与第二次转换A*ap=&ab;没有什么不同 该代码使用一个动态的_cast来说明它是如何工作的 为什么代码在这里使用动态强制转换 dynamic_cast操作符允许您检查转换在运行时是否有效。如果不是,它将返回null,因此断言调用 这样行吗
ap = &abr;
试试看……:
为什么代码在这里使用动态强制转换
dynamic_cast操作符允许您检查转换在运行时是否有效。如果不是,它将返回null,因此断言调用
这样行吗
ap = &abr;
试试看……: 他们使用动态投影来显示它的功能。这就是你为什么要问的答案
否则,该网页上给出的解释是不正确的。您试图使用的资源要么严重过时,要么与某些特定的、低质量的编译器绑定。新兴C++标准的词汇…在这一页的顶部是一个死赠品。C++标准在11年前就变成了现实。这意味着网站不是一个很好的C++资源,特别是动态的,如果你想找的话。
下面是他们的类定义
class A { public: virtual void f( ); };
class B { public: virtual void g( ); };
class AB : public virtual A, private B { };
演员阵容
AB& abr = dynamic_cast<AB&>(*bp); // they say: succeeds
甚至不会编译,因为破坏保护的非法上传在编译时会被拒绝,即使是动态上传,也会被拒绝,即代码格式错误。请注意,在这种情况下,dynamic_cast没有任何特殊功能。对于向上投射,动态投射等同于静态投射或根本不投射。上面的强制转换将不会编译,因为B是私有基。作者似乎错误地认为,在这种情况下,dynamic_cast应该返回空指针
至于ap=&abr-是的,它会起作用。只要a是AB的公共基础,它就没有问题。他们使用动态投射来展示它的功能。这就是你为什么要问的答案
否则,该网页上给出的解释是不正确的。您试图使用的资源要么严重过时,要么与某些特定的、低质量的编译器绑定。新兴C++标准的词汇…在这一页的顶部是一个死赠品。C++标准在11年前就变成了现实。这意味着网站不是一个很好的C++资源,特别是动态的,如果你想找的话。
下面是他们的类定义
class A { public: virtual void f( ); };
class B { public: virtual void g( ); };
class AB : public virtual A, private B { };
演员阵容
AB& abr = dynamic_cast<AB&>(*bp); // they say: succeeds
甚至不会编译,因为破坏保护的非法上传在编译时会被拒绝,即使是动态上传,也会被拒绝,即代码格式错误。请注意,在这种情况下,dynamic_cast没有任何特殊功能。对于向上投射,动态投射等同于静态投射或根本不投射。上面的强制转换将不会编译,因为B是私有基。作者似乎错误地认为,在这种情况下,dynamic_cast应该返回空指针
至于ap=&abr-是的,它会起作用。只要a是AB的公共基,它就没有问题。那么bp=dynamic\u castap是编译的。但是断言失败了。。。该演员不应包括在内。这是一个交叉投射,而不是向上投射。我修好了。谢谢。bp=dynamic\u castap确实可以编译。但是断言失败了。。。该演员不应包括在内。这是一个交叉投射,而不是向上投射。我修好了。非常感谢。