为什么 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++ 不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值