让自己习惯C++

条款1.C++是一个语言联邦

过程形式(procedural)

面向对象形式(object-oriented)

函数形式(function)

泛型形式(generic)

元编程形式(metaprogramming)

NOTE:

    C++有四个次语言:

  1.C  

     no templates ,no exceptions ,no overloading...

  2.object-oriented C++ 

     class, encapsulation ,inheritance ,polymorphism ,virtual function...

  3.template C++ 

    template metaprogramming(TMP  模板元编程)

这块接触比较少!!!!

4.STL

containers, iterators,algorithms,function objects.

这块接触也比较少!!!

      所以,C++高效编程守则视状况而定,取决于使用C++的那一部分。不过觉得,我暂时还考虑不到性能问题,先解决功能问题再说。

条款2:尽量以const ,enum,inline 替换#define(prefer consts,enums,and inlines to #defines)

其实也是,宁愿以编译器替换预处理器。#define 变量在preprocess时被替换掉了。最好让变量保留,编译器可以看到,为了让标识符进入

sysmbol table( 记号表)。

const double AspectRation = 1.653; //这样比#define AspectRation 1.653 更科学,易debugg问题。

对于const 替代 #define有2点:

1.常量指针:

const char* const authorName = "scott meyes";

cosnt std::string authorName ("scott meyes"); //貌似这个效果最好。暂时不知道原因???

2.class的专属常量:

class GamePlayer{

private:

static const int NumTurns = 5;//常量声明式  ,这个不懂,以前以为这种写法就是对变量的definition.这里为何只是declaration ???

int scores[NumTurns];  //使用该常量

....

};

const int GamePlayer::NumTruns;//NumTurns的定义

看到上面的code,有点闷了!!这个跟之前理解的变量的声明和定义完全反过来了。那到底如何区别变量的declaration/definition???

#define 是不可以控制作用域的,const可以。

也提到了enum hack 这个知识点。其实就是枚举一个标识符并赋值,当int 数据类型使用。

            以上提到的都是简单的宏,对于宏参模式(看起来很像函数),用inline函数代替。

                 直接上例子了:

                   #define call_max(a,b) f((a)>(b)?(a):(b))

                    int a = 5 , b = 0;

                    call_width_max(++a,b);//a 被累加了2次

                    call_width_max(++a,b+10);//a被累加了1次

                   good code:

                       template<typename T>

                       inline void callwithmax(const T& a, cosnt T& b)//pass by reference to const

                       {

                         f(a>b?a:b);

                        }

             consts , enums and inlines 使我们对预处理器的依赖性减低了。特别是#define,但#include,#ifdef/#ifndef仍然需要。

              NOTE:

                 对于单纯变量,最好const 对象或enums 代替#defines

                 对于带参数的宏,最好用inline函数 代替#define .

              一句话,尽量不要让预编译的code出现在你的代码中。想法替换掉。

时间: 2024-10-26 07:20:06

让自己习惯C++的相关文章

什么是关联挖掘?如何利用顾客的购物习惯提高销售额?

关联规则挖掘就是从大量的数据中挖掘出有价值描述数据项之间相互联系的有关知识.随着收集和存储在数据库中的数据规模越来越大人们对从这些数据中挖掘相应的关联知识越来越有兴趣.例如从大量的商业交易记录中发现有价值的关联知识就可帮助进行商品目录的设计.交叉营销或帮助进行其它有关的商业决策. 挖掘关联知识的一个典型应用实例就是市场购物分析.根据被放到一个购物袋的购物内容记录数据而发现的不同被购买商品之间所存在的关联知识无疑将会帮助商家分析顾客的购买习惯.如图所示. 发现常在一起被购买的商品关联知识将帮助商家

《敏捷开发的45个习惯》

开篇第一句:continuous development,not episodic. 1以迭代的方式工作: 缺定一小块时间的计划,按时完成他们. 2态度决定一切 a指责不能解决bug b欲速不达:普通的码农不理解那块代码,只要能够工作就好,要么直接复制,要么直接调用.优秀的程序员会深挖一层,想明白会产生什么影响. (防微杜渐,别想着快速修补) (不要孤立编代码,实行代码复审) (使用单元测试,每一快都能测试) c对事不对人 (消极扼杀创新  团队仲裁机制) d排除万难(如何维护别人的代码.还是自

《巴菲特与索罗斯的投资习惯》读书笔记

巴菲特与索罗斯的投资习惯 收益与风险 收益越高风险越大,或者风险越大收益越高都是没有道理的,风险和收益逻辑上不一定是正相关的,只不过收益越高,人们愿意承担的风险越高而已. 降低风险的同时提高收益是不矛盾的.但风险控制应优先于收益. 同样的事情,对你来说是危险的,但对于高手来说则没有风险,因此,为了降低风险,尽力成为高手吧 关于投资 赚钱只是投资的目的而已,投资策略才是投资的手段. 只是将注意力集中在目的上是没有意义的,因为它只是你的手段所产生的自然结果. 因此我们需要把注意力几种在对投资策略的调

【执行力决定命】第3集《好的职业习惯,让执行力提高一倍》

「音频原文」http://dwz.cn/6sANwk 大家好,我是林琳笨,今天和大家分享<好的职业习惯,让执行力提高一倍>,先简单的介绍8个职业习惯的特征,有机会把每一个点拿出来详细讲解. 第一个.做好时间管理 日报习惯:做当天/时间段总结.查当天遗漏.做下个时间段或周期的计划: 建议关注一个词"例行",即每个周期固定要做的事,比如我曾经一个部门同事,每天早上10:00前必须发前一天报表给相关同事,每天18:00前必须发当日BUG清单给技术部,每周一出上周周总结给相关同事等

德鲁克的“五项主要习惯”

德鲁克的"五项主要习惯"是领导特质论的主要流派.德鲁克指出,有效的管理者具有不同的类型,缺少有效性的管理者也同样有不同类型.因此,有效的管理者与无效的管理者之间,在类型方面.性格方面及才智方面,是很难加以区别的.有效性是一种后天的习惯,既然是一种习惯,便可以学会,而且必须靠学习才能获得.他认为一个优秀的管理者必须具备以下五项主要习惯.1.善于利用有限的时间他认为,时间是最稀有的资源,丝毫没有弹性,无法调节.无法贮存.无法替代.时间一去不复返,因而永远是最短缺的.而任何工作又都要耗费时间

养成良好的学习习惯-浅谈学习方法(1)

1.老男孩教育要培训什么? 思想技术 知识 2.养成良好的学习习惯和听课习惯 1)带一支笔和本,记录老师讲解的内容 2  总结时 ,记录关键的信息,抓重点 3) 听课习惯:调动所有感官学习 眼睛看.勤动手(记录和操作).勤思考 4)听课跟上进度 5)课上内容实践和老师保持高度 (软件技术.系统版本.配置路径)先跑通  再连通 二.学好Linux运维四要素 1.设定目标 例:哈佛大学四类人成就了四种不同的人生 给自己定一个目标, 2.掌握方法 1)最有效和最快的学习方法就是向有经验的人学习 2)和

程序员的饮食习惯(千里之行始于足下)

工作了这么多年,也从事了很多份工作,发现效率是最重要的,但经常有力不从心的时候,最后发现都是身体出了状况.最终总结人的身体就像机器一样,正如你只有保养好了机器,才能让机器正常高效的运作起来一样,只有你了解了你的身体作息习惯,合理的安排生物钟,合理的营养搭配才能让你的精神状态很好,以下是通过查询资料总结的一些饮食搭配: 高蛋白食品:抗辐射 早餐:鸡蛋.牛奶.面条.花生 中餐:多吃蛋白质高的东西,如瘦猪肉.牛肉.鸡鸭.动物内脏.鱼和豆制品等, 晚餐:就要多吃维生素高的食物,各种新鲜蔬菜,新鲜水果,还

shell脚本编程的一些好习惯

shell脚本编程的一些好习惯 1.命名规则 脚本命名以.sh结尾,名称尽量见名之意.以下是几种可供参考的脚本命名风格.通过以下清新脱俗的风格,读者能够很easy的明白脚本的作用.         clearlog.sh          ClearLog.sh          clearSql.sh         snmp_install.sh         Monitor.sh 2.脚本信息 为脚本加入生动的信息,比如脚本功能的描述,作者,时间,版本信息等.     #!/bin/ba

优秀项目经理的习惯

刚网上看了两篇优秀项目经理应该养成的习惯,转载记录一下. 优秀项目经理的六个习惯 项目经理是项目的领头人,是项目团队灵魂型的人物.项目经理需要具备怎样的良好习惯方能更有助于团队.项目和自我的成功,史蒂芬·柯维博士在<高效能人士的七个习惯>一书中阐述了高效能人事所需要具备的七个习惯:积极主动.以终为始.要事第一.双赢思维.知彼解己.统合综效.不断更新.无疑,这七个习惯也是优秀项目经理所需要具备的.然而,作为项目经理这样一个特别的角色,除了需要具备上述七个习惯外,还需要具备如下与其职位息息相关的六

影响一生的好习惯

习惯必须改:不改,就会不自觉地走向老路. 10分满分,给现在的自己打分 杂食(8) 锻炼身体,定期定量锻炼(5) 不吃宵夜,早睡早起(6) 信守承诺(10) 不迟到(9) 不忘记回电话(10) 与大家更好地沟通(9) 让别人清楚自己在做什么,如何做(9) 快速处理行政事务(8) 积极倾听(7) 别等到最后一刻才做事(5) 少看电视(10) 多读书(10) 多和家人通话,共食,共乐(8) 控制情绪和脾气(8) 1/10的钱用于合适的投资,包括金钱理财和投资自己能力(10) 定期和家人.朋友联络感情