回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C++之父的FAQ >> 普通 FAQ >> [翻译] 为什么 C++ 允许不安全的代码?
最 近 更 新
[翻译] 为何 C++ 没被用..
[转] 你推荐哪个C++编译..
[转] 你有没有想到C++会..
[转] C++是面向对象语言..推荐
[翻译] 为何 C++ 如此庞..
[翻译] 您是使用何种语..
[翻译] “C++”何得此名?
[翻译] C++ 归您所有吗?
[转] 为什么AT&T要支持C..
[转] 你为什么要发明C++?
最 新 推 荐
[转] C++是面向对象语言..推荐
[翻译] 您怎么看待 C++/..推荐
[翻译] 何谓泛型编程?..推荐
[翻译] 什么是面向对象..推荐
[转] 如果不必考虑和 C ..推荐
[翻译] 类的伟大之处是..推荐
[翻译] C 是 C++ 的子集..推荐
热 门 排 行
[转] C和C++的区别是什..
[翻译] 为何 C++ 没被用..
[转] 你推荐哪个C++编译..
[翻译] 什么是面向对象..推荐
[转] 学习C++从哪本书开..
[翻译] 类的伟大之处是..推荐
[转] 我怎么开始学习C++..
[转] 学习C++需要多少时..
[翻译] C 是 C++ 的子集..推荐
[翻译] 为何编译 C++ 版..
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

[翻译] 为什么 C++ 允许不安全的代码?


来源:蚂蚁的 C/C++ 标准编程 作者:Bjarne Stroustrup 翻译:antigloss 等级:一般
发布于2007-01-19 22:18 被读384次 【字体:

也就是说,为什么 C++ 支持的一些操作能够违反静态(编译时)类型安全机制?

  • 为了直接访问硬件(例如,把整数当作指向设备寄存器的指针)
  • 为了获取最佳的运行时效率和空间效率(例如,不检测访问数组元素的操作(是否越界),
    不检测访问对象的指针(是否有效))
  • 为了和 C 兼容

所以,当你并不需要以上三种特性时,最好避免有如瘟疫般的不安全代码:

  • 不要用类型转换(cast),
  • 不要将数组用作接口(如有必要,请将它们隐藏于高效函数和类的内部,而使用合适的 string、
    vector 等编写其余代码),
  • 避免 void*(如果你真的需要它们,请将它们限制于低级 (low-level) 函数和数据结构的内部,
    并且为用户提供类型安全的接口(通常是模版 (template))),
  • 避免联合体(union),
  • 如果你对指针的有效性存有任何怀疑,请用智能指针(smart pointer),
  • 不要“赤裸裸”地使用 new 和 delete(使用容器,资源句柄等),
  • 不要使用 ...风格的函数(例如 printf)。

几乎所有 C++ 代码都能遵循这些简单的规则。请不要因为你编写 C 代码或者 C 风格的 C++ 代码时不能遵循这些规则而认为 C++ 不安全。

原文地址:http://www.research.att.com/~bs/bs_faq.html#unsafe

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C++ 之父的言论
[转] 我该把const写在类型前面还是后面?
[翻译] 我应该使用按值传递还是按引用传递?

上一篇:[翻译] 何谓泛型编程?其伟大之处何在?
下一篇:[转] 什么是多范型编程?

共有评论 0 条 网友评分 1分 查看全部评论

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss