【C++】基础知识的学习笔记
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1 常见术语
Term | 中文解释 |
---|---|
Declare | 声明 |
cv-qualification (const-and-volatile-qualification) | cv限定 |
Dangling | 悬挂 |
Delegate constructor | 委托构造函数 |
Cv-qualification: const-and-volatile-qualification
用的比较多的就是const
限定符
2 Namespace命名空间
Namespace表示某些工具集合的作用域
“作用域前面加::”显式调用全局域关键字
关于“C++中‘作用域前面加::’做法的用处”请参考知乎回答《C++中“作用域前面加::”可以减少重名的可能性》
简单来说其目的就是可以显式指定准备调用的关键字符号是来自于全局空间global这样编译器则会从全局空间开始检索该符号
我们用一个简单的demo来验证这一点
#include <iostream>
using namespace std;
int a = 3;
int main() {
int a = 1;
cout<<a<<endl;
cout<<::a;
}
>>>
1
3
// 可以看到使用global指示的变量是全局变量a,所以输出值为3
3 编译过程
C++代码的编译主要包括以下几个步骤
- 预处理preprocessing预处理器如GCC中的cpp会处理代码中的预处理指令如 #include 和 #define并生成新的源代码文件
- 编译compilation编译器如GCC中的cc1会将预处理后的源代码编译为汇编代码
- 汇编assembly汇编器如GCC中的as会将汇编代码转换为机器码
- 链接linking链接器如GCC中的ld会将多个机器码文件链接在一起生成可执行文件。
3.2 Ninja的构建过程底层是调用gcc实现的吗
- Ninja 是一种跨平台的构建管理工具CLion中称为 Build Tool它可以与各种编译器和链接器配合使用。所以Ninja 的构建过程底层可以调用 GCC 实现不过也可以调用其他编译器实现这取决于构建项目时使用的编译器和链接器。
- 如果使用GCC和Ninja来构建项目那么Ninja会读取构建脚本并调用 GCC 中的各个工具来完成预处理、编译、汇编和链接等步骤。
- Ninja 主要是用来管理和优化整个构建过程而自身并不会执行编译和链接操作。