高效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 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
随机推荐
- 使用DragonFly进行智能镜像分发
Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具.它旨在提高文件传输的效率和速率,最大限度地利用网络带宽,尤其是在分发大量数据时,例如应用分发.缓存分发.日志分发和镜像分发. 在阿里巴 ...
- JAVA设计模式 2【创建型】原型模式的理解与使用
在本节中,我们将学习和使用原型模式:这一节学习的原型模式也是创建型 模式的其中之一.再次复习一下:创建型 模式就是描述如何去更好的创建一个对象. 我们都知道,在JAVA 语言中.使用new 关键字创建 ...
- AOF文件的写入与同步
在 Redis 中客户端向服务器发送相关写命令请求,这时服务器中有个用于处理这些命令的事件循环进程,对这些命令进行处理,并将相关信息处理的结果反馈给客户端,如:"OK",等.同时, ...
- Consul入门初识
Consul Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCrop公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源 ...
- C#数据结构与算法系列(十四):递归——八皇后问题(回溯算法)
1.介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的经典案例,该问题是国际西洋棋棋手马克斯.贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即 任意两个皇后都不能处 ...
- Redis五种数据类型应用场景
目录 1.1 回顾 2.1 应用场景 2.1.1 String 2.1.2 Hash 2.1.3 List 2.1.4 Zet 2.1.5 zset 3.1 小结 1.1 回顾 Redis的五种数据类 ...
- PHP开发环境搭建工具有哪些?
对于php开发小白来说搭建一个php运行环境就是一道坎! 因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境,一 ...
- Spring Redis开启事务支持错误用法导致服务不可用
1.事故背景 在APP访问服务器接口时需要从redis中获取token进行校验,服务器上线后发现一开始可以正常访问,但只要短时间内请求量增长服务则无法响应 2.排查流程 (1)使用top指令查看C ...
- BootstrapDialog.confirm确认对话框
1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...
- Linux distributions 发布网站
Red Hat: http://www.redhat.com SuSE: https://www.suse.com Fedora: https://getfedora.org/ CentOS: htt ...