C++基础知识的学习笔记
Posted songyuc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++基础知识的学习笔记相关的知识,希望对你有一定的参考价值。
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 主要是用来管理和优化整个构建过程,而自身并不会执行编译和链接操作。
以上是关于C++基础知识的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章