C++ Coding Standards:类型安全

王朝c/c++·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

By Herb Sutter, Andrei Alexandrescu 著

树人 译类型安全90. 避免使用类型转换,优先使用多态。

关闭转换:避免通过转换一个对象的类型来定制行为。通过模板和虚拟函数机制,让类型(而不是类型的调用代码)来决定其自身的行为。

91. 依赖于类型,而不是表示法。

不要尝试X射线对象:不要去假设对象在内存中是如何表示的。让类型自身来决定如何从内存中写入和读取其对象。

92. 避免使用reinterpret_cast。

谎言是站不住脚的:不要试图用reinterpret_cast来迫使编译器把一种类型的对象重新解释成一种不同类型的对象。这是和维护类型安全机制相对立的,而且reinterpret_cast甚至不能保证做这样或那样的行为。

93. 避免对指针使用static_cast。

不能static_cast来转换指向动态对象的指针:从使用dynamic_cast到重构再到重新设计都是一个安全的替换策略。

94. 避免去除const限定。

Some fibs are punishable:去除const限定往往会产生未定义的行为,即使这样做是合法的,它都是一类不良的程序设计风格。

95. 不要使用C风格的强制转换。

时间不能完全:C风格的强制转换依赖于不同上下文有着不同的(往往还是危险)语义,而这些“伪装”都隐藏在一个单一的语义后面。用C++风格的强制转换来代替C风格的,这样可以防止意外的错误。

96. 不要对非POD(Plain Old Data)进行memcpy或memcmp操作。

不要尝试X射线对象:不要使用memcpy和memcmp来拷贝和比较任何较原始内存更结构化一些的东西。

97. 不要使用联合来重新解释表示法(实体)。

本性难移:联合可以被滥用成“没有转换的转换”,写入一个成员而读取另一个成员。这比reinterpret_cast更阴险和难以预测。

98. 不要使用可变参数(…)。

省略号(…)会导致崩溃:它从C中沿袭下来的危险。避免使用可变参数,使用更高级别的C++构造和程序库来替代它。

99. 不要使用无效对象。不要使用不安全的函数。

不要使用过期药品:无效对象和历史的但不安全的函数会严重影响程序的“健康”。

100. 不要多态地处理数组。

数组是ill-adjusted:多态地处理数组是一种严重的类型错误,而编译器可能不会察觉。不要掉到这个陷阱中去。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航