C++简介
C++98/03 | 98第一个国际标准,03小修订 | 经典 |
C++11/14 | 追新求变 重大变更 | 主流 |
C++17 | 不算是很大的进步 | 最佳选择 |
C++20 | 重要里程碑 | 明日之星 |
C++程序生命周期
编码 coding | 代码规范,注释规范,设计模式,习惯用法 |
预处理 pre-processing | 文本替换,“#”开头的指令 |
编译(连接) compiling linking | 检查语法,语义 |
运行 running | 载入内存 |
编程范式
面向过程,面向对象,泛型编程,模板元编程,函数式编程
编码阶段的代码风格
大部分人都能写出机器能看懂的代码,但只有优秀的程序员才能写出任何人都能看懂的代码
-
用好空格和空行,多留白。
-
给变量,函数,类起个好名字,
-
给变量,函数,类加上注释,让代码自带文档。
-
用"*.hpp"的形式来组织代码。
预处理阶段编程
-
#include 包含任意文件,可以写一些小的代码片段,再通过该指令引进程序里。
-
头文件应该加上"#include Guard",防止重复包含。
-
"#define"用于宏定义,非常灵活,但滥用文本替换可能会降低代码的可读性。
-
条件编译其实就是指预处理编程里的分支语句,可以改变源码的形态
-
C++预定义了大量的环境相关宏,用好他们就可以针对系统生成比较合适的代码
编译阶段编程
-
属性相当于编译阶段的标签,可用来标记变量,函数或类,让编译器发出或者不发出警告,还能手动指定代码的优化方式。
-
官方标准定义的属性比较少,我们也可以使用非官方的属性,需要以类似名字空间的方式使用
-
static_assert是静态断言,在编译阶段计算常数和类型,如果断言失败就会导致编译错误。它也是迈向模板元编程的第一步。
-
和运行阶段的动态断言一样,static_assert可以在编译阶段定义各种前置条件,充分利用C++静态类型语言的优势,让编译器执行各种检查,避免把隐患带到与运行阶段。
运行阶段的调试分析
详细专题补充