C语言的扩展
- 关注性能
- 与底层硬件紧密结合,与JAVA、Pyhton不同
- 对象生命周期的精确控制
- Zero-Overhead Abstraction
引入大量特性,便于工程实践
是一系列的不断演化的标准集合
- C++98/03, C++11, C++14, C++17, C++20….. 不同的版本
- 语言本身的改进
- Memory Model
- Lambda Expression
- 标准库的改进 有些标准库会被淘汰,编译会报警告
- C++标准的工业界实现
- MSVC /GCC /Clang
- 每个编译器可能并不完全遵照标准 标准是标准,实现是实现,每个公司出的工具跟C++标准可能不太一样,可能跟不上标准的更新速度
- 不同的实现存在差异
- 不能脱离具体的语境讨论C++
- 编写程序时要注重:
单独一次编译耗费资源,速度慢,需要分块处理,链接就是联系起不同的目标文件。
分块处理衍生出的概念:(层层递进的关系)
- 定义/声明
- 头文件/源文件、里面包含了所有的声明
- 翻译单元
- 源文件+相关头文件(直接/间接) ——应忽略的预处理语句
一处定义原则:
提升速度
- 不适合调试,可选择debug和release编译
- 使用debug进行调试,relea是优化后的编译
-
汇编Assembler
链接
合并多个目标文件
.o,关联声明与定义
外部链接,内部链接
常见错误:只有声明,找不到定义名称空间namespace
using namespace std;using是编译指令,调用两个以上不同的库时,有些函数名会重名,需要封装在一个名称空间 的单元中。用法:Microflop::wanda(***)前面的Microflop就是命名空间 将
using namespace ***放在所有函数的外部,表示所有函数都能够访问名称空间输入输出流cout

cout是一个预定义的对象,知道如何显示信息;”<<”指的是将右侧的信息送入输出流中控制符endl
endl是控制符(manipulator)的一种,可以重起一行
-
标记和空白
很有意思的是,C++Prime这本书将代买中的符号称为token,也就是不可分割的元素叫做标记
C++语句
声明语句
int carrots;提供了两项信息,需要的内存以及内存单元的名称,编译器负责分配和标记内存的细节。这条语句可以当成一个变量声明,C++使用变量前必须声明它,有效防止手残打错变量名出现的莫名其妙的bug赋值语句
cout的新花样
与C语言中的printf不同,printf需要给出输出变量的类型,就算给错了照样有输出,只不过是乱码。
而cout得益于C++的面向对象特性,能够识别输出变量的类型,算是运算符重载的一种。 cout可以拼接输出,标记间的换行符和空格看作可相互替换的,也就是换行也能续上去,只要没有;就是文本编辑的格式
cin
cin >> carrots可以看作是流入程序的字符流,也是一个智能对象函数
函数必须知道要有参数类型和返回值类型
函数原型是只描述接口,而函数定义有定义的代码
调用函数 callmain函数
返回值是int类型,因为它是 int main()
return 0返回给操作系统,如果接收到0则表明程序运行正确,非0则有问题。运算符重载
编译器可以通过上下文来确定运算符的含义
