GotW #17 CastsXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />
著者:Herb Sutter
翻译:K ][ N G of @rk™
[声明]:本文内容取自www.gotw.ca网站上的Guru of the Week栏目,其著作权归原著者本人所有。译者kingofark在未经原著者本人同意的情况下翻译本文。本翻译内容仅供自学和参考用,请所有阅读过本文的人不要擅自转载、传播本翻译内容;下载本翻译内容的人请在阅读浏览后,立即删除其备份。译者kingofark对违反上述两条原则的人不负任何责任。特此声明。
Revision 1.0
Guru of the Week 条款17:转型
难度:6 / 10
(你对C++转型了解多少?适当的使用它可以极大的提高代码的可靠性。)
[问题]
标准C++中新风格的转型与旧风格的C转型相比,具有更强大的功能和安全性。你对它了解多少?本条款中使用下列类和全局变量:
class A { /*...*/ };
class B : virtual A { /*...*/ };
struct C : A { /*...*/ };
struct D : B, C { /*...*/ };
A a1; B b1; C c1; D d1;
const A a2;
const A& ra1 = a1;
const A& ra2 = a2;
char c;
1. 下列哪一种新风格的转型不能与C中的转型相对应?
const_cast
dynamic_cast
reinterpret_cast
static_cast
2. 对于下列每一个C中的转型语句,写出相应的新风格转型语句。其中哪一个语句如果不以新风格编写的话就是不正确的?
void f() {
A* pa; B* pb; C* pc;
pa = (A*)&ra1;
pa = (A*)&a2;
pb = (B*)&c1;
pc = (C*)&d1;
}
3. 评判下列每一条C++转型语句的编写风格和正确性。
void g() {
unsigned char* puc = static_cast(&c);
signed char* psc = static_cast(&c);
void* pv = static_cast(&b1);
B* pb1 = static_cast(pv);
B* pb2 = static_cast(&b1);
A* pa1 = const_cast(&ra1);
A* pa2 = const_cast
转载于:http://blog.itpub.net/10752043/viewspace-991202/