Bjarne Stroustrup 语录

news/2024/7/3 12:25:52 标签: vector, string, function, float, vb, 算法
 Bjarne Stroustrup 语录:

一、致读者
  1. 在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示。让程序的结构尽可能地直接反映这些思想:
  ★.如果你能把“它”看成一个独立的概念,就把它做成一个类。
  ★.如果你能把“它”看成一个独立的实体,就把它做成某个类的一个对象。
  ★.如果两个类有共同的界面,将此界面做成一个抽象类。
  ★.如果两个类的实现有某些显著的共同东西,将这些共性做成一个基类。
  ★.如果一个类是一种对象的容器,将它做成一个模板。
  ★.如果一个函数实现对某容器的一个算法,将它做成为对一族容器可用的模板函数。
  ★.如果一组类、模板等相互之间有逻辑联系,将它们放进一个名字空间里。
  2. 在你定义一个并不是实现某个像矩阵或复数这样的数学对象的类时,或者定义一个低层的类型如链接表的时候:
  ★.不要使用全局数据(使用成员)。
  ★.不要使用全局函数。
  ★.不要使用公用数据成员。
  ★.不要使用友元,除非为了避免a或c。
  ★.不要在一个类里面放“类型域”(指那种为了说明一个类所存储数据的情况而放置的标志域) ;采用虚函数。
  ★.不要使用在线函数(inline function),除非作为效果显著的优化。
  二、C++ 概览
  1. 不用害怕,一切都会随着时间的推移而逐渐明朗起来。
  2. 你并不需要在知道了C++的所有细节之后才能写出好的C++程序。
  3. 请特别关注程序设计技术,而不是各种语言特征。
  三、标准库概览
  1. 不要像重新发明车轮那样企图做每件事;去使用库。
  2. 不要相信奇迹;要理解你的库能做什么,它们如何做,它们做时需要多大的代价。
  3. 当你遇到一个选择时,应该优先选择标准库而不是其他的库。
  4. 不要认为标准库对于任何事情都是最理想的。
  5. 切记#include 你所用到的功能的头文件。
  6. 记住,标准库的功能定义在名字空间std之中。
  7. 请用string,而不是char*。
  8. 如果怀疑,就用一个检查区间范围的向量(例如Vec)。
  9. vector<T> 、list<T>和 map<key,value> 都比T[] 好。
  10. 如果向一个容器中添加一个元素,用push_back() 或 back_inserter()。
  11. 采用对vector的push_back(),而不是对数组的realloc()。
  12. 在main()中捕捉公共的异常。
  四、类型和声明
  1. 保持较小的作用域。
  2. 不要在一个作用域和它外围的作用域里采用同样的名字。
  3. 在一个声明中只声明一个名字。
  4. 让常用的和局部的名字比较短,让不常用的和全局的名字比较长。
  5. 避免看起来类似的名字。
  6. 维持某种统一的命名风格。
  7. 仔细选择名字,反映其意义而不是反映实现方式。
  8. 如果所用的内部类型表示某种可能变化的值,请用typedef 为它定义一个有意义的名字。
  9. 用typedef为类型定义同义词,用枚举或类去定义新类型。
  10. 切记每个声明中都必须描述一个类型(没有“隐式的int”)。
  11. 避免有关字符数值的不必要假设。
  12. 避免有关整数大小的不必要假设。
  13. 避免有关浮点类型表示范围的不必要假设。
  14. 优先使用普通的int 而不是short int 或者long int。
  15. 优先使用double 而不是float 或者long double。
  16. 优先使用普通的 char 而不是 signed char或者 unsigned char。
  17. 避免做出有关对象大小的不必要假设。
  18. 避免无符号算术。
  19. 应该带着疑问去看待从signed 到unsigned ,或者从unsigned 到signed 的转换。
  20. 应该带着疑问去看待从浮点到整型的转换。
  21. 应该带着疑问去看待向较小类型的转换,如将int转换到char。
  五、忠告
  1. 避免非平凡的指针算术。
  2. 当心,不要超出数组的界线去写。
  3. 尽量使用0而不是NULL。
  4. 尽量使用vector 和valarray ,而不是内部(C风格)的数组。
  5. 尽量使用string而不是以0结尾的char 数组。
  6. 尽量少用普通的引用参数。
  7. 避免 void*,除了在某些底层代码里。
  8. 避免在代码中使用非平凡的文字量(“神秘的数”)。相反,应该定义和使用各种符号常量。(这里应理解为避免使用无意义的立即数,而定义一些能够代表意义的常量,例如,用true而不要用1(C/C++)或-1(VB))

http://www.niftyadmin.cn/n/1139156.html

相关文章

js 刷新页面但是不闪烁_Js历史

1 Js是为了赶上java的潮流 把名字从LiveScript改为JavaScript2 Js出现原因 最初的输入验证必须把表单数据发到服务端上才能验证 而最初的js是为了解决这个问题。3 Web浏览器只是js实现的可能的宿主环境之一&#xff0c;其他的环境还有AdobeFlash 和Node4 JavaScript包括三个部分…

typedef的四个用途和两个陷阱

用途一&#xff1a; 定义一种类型的别名&#xff0c;而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如&#xff1a; char* pa, pb; // 这多数不符合我们的意图&#xff0c;它只声明了一个指向字符变量的指针&#xff0c; // 和一个字符变量&#x…

权威dns服务器存储信息,权威域名服务器

权威域名服务器 内容精选换一换本帖最后由知足常乐于2017-11-2513:02编辑DNS的查询过程有两种类型&#xff1a;递归查询和迭代查询。递归查询用于主机向本地域名服务器的查询。主机向本地域名服务器发出请求时&#xff0c;如果本地域名无法给出查询域名的IP地址&#xff0c;那么…

wps底纹去不掉_OMG | 没有它,娜扎徐璐脸上的痘也去不掉

如果没有好的皮肤底子&#xff0c;又怎么敢画裸妆呢&#xff1f;娜扎一直以来就以高颜值&#xff0c;好皮肤而出圈&#xff0c;让同是90后的妹子的我一直是又酸又羡慕。这几年皮肤状态越来越好&#xff0c;高清镜头下的皮肤也看不出什么瑕疵&#xff0c;肤质更是清透光亮&#…

新浪服务器远程安装系统,搭建PXE远程安装服务器+实现Kickstart无人值守安装

(基于vsftpd提供YUM软件仓库&#xff0c;基于PXE方式实现网络安装&#xff0c;基于kickstart配置文件实现自动应答。)系统环境(本实验为RHEL6虚拟机环境操作)软件环境&#xff1a;vsftpd-2.2.2-6.el6_0.1.i686sysstat-9.0.4-18.el6.i686dhcp-4.1.1-19.P1.el6.i686tftp-server-0…

Xerces C++解析XML文档

前一阵子学习Xerces-C&#xff0b;&#xff0b;用于解析指定格式XML文档。在这里&#xff0c;把自己的学习经历和大家分享一下&#xff0c;在这里仅仅讲一些入门的知识&#xff0c;希望对大家有所帮助。 Xerces-C是什么&#xff1f; Xerces-C 的前身是 IBM 的 XML4C …

jenkins使用_使用Jenkins来发布和代理.NetCore项目

Back toStudy!注&#xff1a;书接上文&#xff0c;上回《【CI/CD系列】使用Docker安装Jenkins》咱们说到了使用Docker镜像的方式&#xff0c;来建立Jenkins服务&#xff0c;用来持续集成和持续发布项目&#xff0c;但是上一篇文章有两个问题&#xff1a;01创建的容器不能操作和…

浅谈C/C++内存泄露及其检测工具

http://www.cnblogs.com/taoxu0903/archive/2007/10/27/939261.html 对于一个c/c程序员来说&#xff0c;内存泄漏是一个常见的也是令人头疼的问题。已经有 许多技术被研究出来以应对这个问题&#xff0c;比如 Smart Pointer&#xff0c;Garbage Collection等。Smart Pointer技术…