视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++的更多相关文章

  1. Best Practices for Performance_1、2 memory、Tips 性能和小的优化点、 onTrimMemory

    http://developer.android.com/training/articles/memory.htmlhttp://developer.android.com/tools/debuggi ...

  2. 基于 flow.ci 实现 PHP 项目自动化持续集成

    高效程序员的习惯之一--让开发流程自动化.Automating shapes smarter future. 这是一个关于如何快速实现 PHP 项目自动化持续集成的快速指导.无论你是否使用过持续集成, ...

  3. jQuery使用经验建议

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以复制并粘贴大部分的代码结构,只要专注最主要的逻辑代码就行了. 使用相同的设计模式和架构也 ...

  4. 摘抄——读《大话移动APP测试 Android与IOS》

    用了两天读完了<大话移动APP测试 Android与IOS>,由于刚开始接触移动测试,技术型的篇章只能先放过了o(╯□╰)o,有以下内容觉得很有必要时不时的看看,来反思自己的工作,自勉!! ...

  5. 转:10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  6. 快速开发 jQuery 插件的 10 大技巧(转)

    转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...

  7. 10 条建议让你创建更好的 jQuery 插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

  8. 编写优秀jQuery插件的10个技巧

    前言:在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行 ...

  9. 10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  10. 快速开发 jQuery 插件的 10 大技巧

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

随机推荐

  1. [ C++ ] 勿在浮沙筑高台 —— 拾遗

    explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详 ...

  2. python三大神器之fabric

    Fabric Fabric是一个python的远程执行shell的库,同时它也是一个命令行工具.它提供了丰富的同 SSH 交互的接口,可以用来在本地或远程机器上自动化.流水化地执行 Shell 命令. ...

  3. Layer 3.0

    https://jeesite.gitee.io/front/layer/3.0/layer.layui.com/index.html

  4. js 字符串排序

    this.regionsList = result.sort((a, b) => a.warehouseAreaCode.localeCompare(b.warehouseAreaCode)); ...

  5. 联通BSS-ESS-CBSS系统安装相关

    前言 1. 版本信息 版本 日期 记录 1.0 2016.08.15 初始版本 2. 作者信息 信息 内容 部门 夷陵区分公司 作者 Z.J.T 邮箱 coralfoxzjt@163.com 必须操作 ...

  6. LeetCode-Queue

    简单题 1. 数据流中的移动平均值 $(leetcode-346) 暂无 2. 最近的请求次数(leetcode-933) 写一个 RecentCounter 类来计算最近的请求. 它只有一个方法:p ...

  7. Guava RateLimiter限流器使用示例

    Guava中的RateLimiter可以限制单进程中某个方法的速率,本文主要介绍如何使用,实现原理请参考文档:推荐:超详细的Guava RateLimiter限流原理解析和推荐:RateLimiter ...

  8. html/css解决inline-block内联元素间隙的多种方法总汇

    序 display有几种属性:inline是内联对象,比如<a/> . <span/>标签等,可以“堆在一起”显示,宽高由内容决定,不能设置:block是块对象,比如<d ...

  9. Java桌面应用程序打包

    IDEA环境生成Jar 设置配置 File -> Project Structure -> Artifacts -> + -> JAR -> From modules w ...

  10. 12.Clear Flags属性与天空盒

    选中Hierarchy面板的摄像机,然后在右侧Inspector面板的Clear Flags属性可以找到有如下选项, SkyBox:天空盒(默认效果,让场景看着有一个天空) Solid Color:固 ...