高效C++:让自己习惯C++
视C++为一个联邦语言
面向过程,面向对象,泛型编程,元编程,C++同时支持,强大而迷惑
C++语言可以分为如下4个部分:
C,C语言相同
C with Class,包括封装、继承、多态...
Template C,模板元编程
STL,标准C++的一部分,主要是和容器、迭代、算法等有关
每个部分有每个部分自己的高效规则,不通用,注意区分
尽量以const、enum、inline替代#define
以编译器替代预处理器------核心
使用宏报错后,编译器无法提示宏定义的名称,只能提示宏具体的内容
宏定义不会进入到符号表,因此给调试带来一定的麻烦
类中私有的静态变量代替define
const int Test::Num = ; class Test
{
private:
static const int Num;
int Data[Num];
}
以枚举代替define
class Test
{
public:
enum DATATYPE {ONE = , TWO = }; //作用域为类内,类外加类名访问
}
以inline替代define
template<typename T>
inline void Max(const T& lhs, const T& rhs)
{
//函数实现
} 替代 #define Max(a, b) ((a) > (b) ? (a) : (b)
enum和#define不能取地址
对于单纯的常量定义,以const或enum代替define
对于函数宏,以inline函数代替
尽可能使用const
原因:
明确变量和方法的行为
防止误赋值的情况
const可以声明任何变量、对象、参数、函数返回类型、成员函数本体
当const和no-const成员函数功能相同时,no-const使用类型转换调用const函数
const_cast:移除变量的const属性
static_cast:
)完成基础数据类型
)同一个继承体系中类型的转换
)任意类型与空指针类型void*之间的转换
dynamic_cast:
使用多态的场景,有继承,有虚函数,向下转型时使用
reinterpret_cast:
)改变指针或引用的类型
)将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型
)不知道用哪一个类型转换就用它
确认对象在使用前已经初始化
最简单的规则,往往最容易被忽视,就像面向对象设计原则中类的单一原则,一不小心就被忽视了,然后导致“破窗”
确认所有的成员变量都在初始化列表中进行初始化,不要等到在构造函数的函数体中进行赋值
以函数内的static变量代替全局变量(因为全局变量的初始化和使用可能在不同的任务中),解决全局变量先使用后初始化的问题
extern int g_data; int& getData()
{
static int data;
return data;
}
高效C++:让自己习惯C++的更多相关文章
- Best Practices for Performance_1、2 memory、Tips 性能和小的优化点、 onTrimMemory
http://developer.android.com/training/articles/memory.htmlhttp://developer.android.com/tools/debuggi ...
- 基于 flow.ci 实现 PHP 项目自动化持续集成
高效程序员的习惯之一--让开发流程自动化.Automating shapes smarter future. 这是一个关于如何快速实现 PHP 项目自动化持续集成的快速指导.无论你是否使用过持续集成, ...
- jQuery使用经验建议
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以复制并粘贴大部分的代码结构,只要专注最主要的逻辑代码就行了. 使用相同的设计模式和架构也 ...
- 摘抄——读《大话移动APP测试 Android与IOS》
用了两天读完了<大话移动APP测试 Android与IOS>,由于刚开始接触移动测试,技术型的篇章只能先放过了o(╯□╰)o,有以下内容觉得很有必要时不时的看看,来反思自己的工作,自勉!! ...
- 转:10条建议让你创建更好的jQuery插件
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...
- 快速开发 jQuery 插件的 10 大技巧(转)
转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...
- 10 条建议让你创建更好的 jQuery 插件
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
- 编写优秀jQuery插件的10个技巧
前言:在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行 ...
- 10条建议让你创建更好的jQuery插件
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...
- 快速开发 jQuery 插件的 10 大技巧
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
随机推荐
- 数据库事务(1)----- JDBC事务与JTA事务
数据库事务(一)- JDBC事务与JTA事务 本文主要对JDBC事务与JTA事务做一个简单介绍. 1. 数据库事务概念 一个数据库事务通常包含对数据库进行读或写的一个操作序列.它的存在包含有以下两个目 ...
- CentOS 7 Nacos 集群搭建
环境 CentOS 7.4 MySQL 5.7 nacos-server-1.1.2 本次安装的软件全部在 /home/javateam 目录下. MySQL 安装 首先下载 rpm 安装包,地址:h ...
- HDU 2157 How many ways?【矩阵快速幂】
题目 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线 ...
- 【floyd+矩阵乘法】POJ 3613 Cow Relays
Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a rel ...
- CI CD概念
CI:持续集成 Continuous Integration CD:持续发布 Continuous Delivery (完)
- vue项目chunk包loading失败解决办法
错误截图: 解决方法: // loading chunk 出错处理 router.onError((error) => { const pattern = /Loading chunk (\d) ...
- mysql高可用架构MHA搭建(centos7+mysql5.7.28)
无论是传统行业,还是互联网行业,数据可用性都是至关重要的,虽然现在已经步入大数据时代,nosql比较流行,但是作为数据持久化及事务性的关系型数据库依然是项目首选,比如mysql. 现在几乎所有的公司项 ...
- axure8.0实现tab切换
这两天帮忙做产品原型图,tab切换做一次忘一次,这次索性记录一下,免得下次再忘了. 1.在元件库中拉出来一个动态面板,双击动态面板,添加状态,添加完成之后,点击红色标注的地方,开始编辑每个面板状态: ...
- 「疫期集训day1」无言
正式集训第一天,感觉没啥特别大的感受,无非是奥赛时间延长了,效率提高了,身外事少了 当然不止这些 感受1:有些曾经被恶的题现在仍然在恶心,例如昨天的farmcraft,今天的整数划分(和着多边形一块调 ...
- 常用js代码片段(一)
1.如果数组所有元素都满足函数条件,则返回true.调用时,如果省略第二个参数,则默认传递布尔值. const all= (arr, fn=Boolean) => arr.every(fn); ...