C++学习笔记:第1章 C++基础

1. 什么是C++

比较流行的编程语言

 与底层硬件紧密结合:比如大端法与小端法,根据硬件决定

对象生命周期的精确控制:C#不用关注对象什么时候销毁,C++需要程序员处理,不需要额外线程去垃圾回收

Zero-Overhead Abstraction:不需要对不适用的语言特性付出成本,比如虚函数。使用了语言特性不等于付出运行期成本(部分运算可以交给编译期)

C语言的扩展

关注性能、引入大量特性,便于工程实践

C++标准的工业界实现

有很多不同编译器,每个编译器可能并不完全遵照标准;不同实现存在差异(不同编译器有不同结果,但是都是对的,可能因为C++标准没有明确规定)

不能脱离语境

编译环境、标准。编程时要注重性能与标准

2、开发环境及相关工具

一般用集成开发环境:VS/codelite/code::blocks

工具:/usr/bin/time:linux看程序用时、valgrind:检查程序泄露

cpp reference: 百科全书,查标准

compiler explorer: 网站,生成汇编代码并与原程序对应,且能选编译器

C++ insights: 把新的语法变成等价的程序,帮助理解

3、C++的编译/链接模型

分块处理

将文件分块,一个个编译成为目标文件,再链接在一块成为可执行程序

C++学习笔记:第1章 C++基础_第1张图片

概念

定义/申明:不同文件同时使用变量、函数等,在其中一个定义,其他的申明,就可以通过编译,链接的时候再去查找。

头文件/源文件:如果很多申明都申明在一个文件,直接全部都写在头文件,别的源文件文件只需要引用头文件。提升书写效率。头文件也可以包含定义。

翻译单元:源文件+相关头文件-应该忽略的预处理语句

一处定义原则:所有的翻译单元中只有一个定义

过程 预处理:把源文件变成翻译单元。防止头文件被循环展开(比如两个头文件互相包含,解决方式是#ifndef xxx #define xxx #endif 就是如果我没定义过我就定义。#progra once是更好的解决方案,因为前种方法可能有同名头文件 )->编译:预处理完的输入变成汇编代码->汇编:变成机器语言->链接:把所有目标文件放在一起成为可执行程序

增量编译/全部编译:改头文件的时候基本选择全部编译,增量编译是源文件更改就可以随之增量编译

链接:把所有目标文件合在一起,可能会出现编译成功但是链接失败

你可能感兴趣的:(c++)