高效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 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
随机推荐
- springboot + rabbitmq 做智能家居,我也没想到会这么简单
本文收录在个人博客:www.chengxy-nds.top,共享技术资源,共同进步 前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇 ...
- idea的maven项目无法引入junit类
本机:java版本:1.8 pom中是junit版本:4.12 出现问题:在使用@Test 无法引入 : org.junit.Test; 解决方法:junit在pom.xml改为 4.12-beta- ...
- 黎活明8天快速掌握android视频教程--14_把文件存放在SDCard
把文件保存在手机的内部存储空间中 1 首先必须在清单文件中添加权限 <?xml version="1.0" encoding="utf-8"?> & ...
- JavaWeb网上图书商城完整项目--25.注册页面之隐藏没有内容的错误信息实现
在上一章中我们显示的效果如下所示: 上面后面都有错误的红色×的显示,这样是不对的,我们要解决该问题 我们要循环遍历每一个错误的信息,看它的内容有没有,如果有内容我们就显示错误的×,如果没有就不显示× ...
- 尚硅谷ajax视频教程1
1.+尚硅谷_佟刚_Ajax_概述.wmv 2.+尚硅谷_佟刚_Ajax_使用+XMLHttpRequest+实现+Ajax.wmv XMLHttpRequest 对象提供了对 HTTP 协议的完全的 ...
- Pytorch入门——手把手带你配置云服务器环境
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天这篇是Pytorch专题第一篇文章. 大家好,由于我最近自己在学习Pytorch框架的运用,并且也是为了响应许多读者的需求,推出了这个P ...
- 入门大数据---通过Flume、Sqoop分析日志
一.Flume安装 参考:Flume 简介及基本使用 二.Sqoop安装 参考:Sqoop简介与安装 三.Flume和Sqoop结合使用案例 日志分析系统整体架构图: 3.1配置nginx环境 请参考 ...
- ssh -i 密钥文件无法登陆问题
一.用ssh 带密钥文件登录时候,发生以下报错 [root@99cloud1 ~]# ssh -i hz-keypair-demo.pem centos@172.16.17.104The authen ...
- Maven中央仓库正式成为Oracle官方JDBC驱动程序组件分发中心
1. 前言 相信参与使用Oracle数据库进行项目开发.运维的同学常常被Oracle JDBC驱动的Maven依赖折磨.现在这一情况在今年二月份得到了改变,甲骨文这个老顽固终于开窍了. 一位甲骨文的工 ...
- mysql根据一张表更新另一张表数据
UPDATE channelcountry, appywproducts SET channelcountry.ChannelName = appywproducts.YWNameCN WHERE c ...