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++基础知识的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

c++学习笔记---02---从一个小程序说起

UE C++学习笔记

MFC学习笔记1---准备工作

第8讲——函数探幽

SHELL脚本攻略(学习笔记)--1.4 变量(基础)

C++基础知识的学习笔记