本文主要是介绍为什么 C++ 允许不安全的代码(Bjarne Stroustrup),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为什么 C++ 允许不安全的代码?
也就是说,为什么 C++ 支持可以用来违反静态(编译时)类型安全规则的操作?
- 为了直接访问硬件(例如,把整数当作指向设备寄存器的指针)
- 为了获取最佳的运行时效率和空间效率(例如,不检测访问数组元素的操作(是否越界),不检测访问对象的指针(是否有效))
- 为了和 C 兼容
所以,当你并不需要以上三种特性时,最好避免有如瘟疫般的不安全代码:
- 不要用类型转换(cast),
- 不要将数组用作接口(如有必要,请将它们隐藏于高效函数和类的内部,而使用合适的 string、vector 等编写其余代码),
- 避免 void*(如果你真的需要它们,请将它们限制于底层 (low-level) 函数和数据结构的内部,并且为用户提供类型安全的接口(通常用模版 (template)),
- 避免联合体(union),
- 如果你对指针的有效性存有任何怀疑,请用智能指针(smart pointer),
不要使用“裸的” new 和 delete(改用容器,资源句柄等), - 不要使用 … 风格的函数(例如 printf),
- 避免使用宏,除了头文件保护(include guards)
几乎所有的 C++ 代码都可以遵循这些简单的规则。如果您使用 C++ 写 C 代码或 C 风格的代码,请不要因为你没法遵循这些规则就认为 C++ 不安全
这篇关于为什么 C++ 允许不安全的代码(Bjarne Stroustrup)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!