让自己习惯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出现在你的代码中。想法替换掉。
让自己习惯C++的更多相关文章
- 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...
- 漫谈C++:良好的编程习惯与编程要点
以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯. ① Header(头文件)中的防卫式声明 complex.h: # ifndef ...
- PHP新手常见的一些不好习惯(抄的 有待理解)
1.不写注释(是个好习惯,不过也没必要每个语句都要写) 2.不使用可以提高生产效率的IDE工具 3.不使用版本控制 4.不按照编程规范写代码 5.不使用统一的方法 6.编码前不去思考和计划 7.在执行 ...
- XCode设置自己windows习惯的快捷键(比如Home、End键)
Xcode的preference(command+,)中可以设置Key Bindings.绑定自己习惯的快捷键.实测系统快捷键设置同样名字也可以生效,但操作比较繁琐这里就不介绍了. 1.打开Xcode ...
- Web开发者需养成的好习惯
Web开发者需养成的8个好习惯 每个行业有着每个行业的标准和一些要求,自己只是一个进入前端领域的小白,但是深刻的知道,习惯很重要,就Web开发分享一下,要养成的一些好的习惯. 优秀的Web开发人员工作 ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- SQL SERVER全面优化-------写出好语句是习惯
前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...
- java程序员保持天天快乐的6个习惯
忍不住感叹,我第一次对Buffer(在社交媒体上发布最简单的方式)有所想法已经差不多是两年前的事了.并且,在我有想法的一年半前,我还在前面那家新创公司工作的时...... 忍不住感叹,我第一次对Buf ...
- java良好的编码习惯
1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步 ...
- callback res.end 记得return(Javascript需要养成的良好习惯)
错误示例: app.get('do',function(req,res,next){ getUserId(function(err,userId){ if(err){ res.end(err);//错 ...
随机推荐
- python界面工具pyqt基础教程
这里有一份很详细的中文翻译供我们学习pyqt,很适合初学者和中级学者,直接丢传送门,不多说 http://www.qaulau.com/books/PyQt4_Tutorial/introductio ...
- wordpress数据库结构及表说明
数据表结构: wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogroll)wp_options:存储WordPress系统选项和插件 ...
- 组合数+容斥原理 UVALive 7040 Color(14西安F)
题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...
- LCA最近公共祖先知识点整理
题解报告:hdu 2586 How far away ? Problem Description There are n houses in the village and some bidirect ...
- 1-16使用try-catch捕捉异常
处理异常 可以使用try-catch-处理异常,例如之前的程序可以使用try-catch-处理 package com.monkey1024.exception; import java.io.Fil ...
- normal曲线绘制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- web 前端的一些问题
1. HTML 和 JS 一个网页显示出来的静态的内容为html创见的静态object 对这些object的操作通过JS来响应 2. HTTP cookie cookie是由server set, 由 ...
- VMwareworkstation 12安装
由于这篇博客中有大量截图,一个一个上传太累了,所以请点击以下链接进行查看 百度云:http://pan.baidu.com/s/1bQxPSi 这里直接粘贴文字可以,但是详细的截图贴不出来!
- MySQL日期处理
一.MySQL 获得当前日期时间 函数1.1 获得当前日期+时间(date + time)函数:now()mysql> select now(); +---------------------+ ...
- 前端之CSS创建的样式
CSS即层叠样式表,在创建时有以下几种样式: 1.内联样式(行内样式.行间样式): <标记 style=“属性:属性值:”></标记> 2.内部样式(嵌入式样式): <s ...