一、什么是C++
1. C++介绍
- C++由程序员控制生命周期(性能提升);
- C++数据存储等方式由硬件决定(性能提升);
C++11 引入了 type_traits/range;
C++17 删除了 auto_ptr;
二、C++开发环境&相关工具
学习视频(英文会议):
三、C++的编译/链接模型
预处理→编译→汇编→链接
注: .o文件 即 目标文件
1. 预处理:防止头文件被循环展开 (推荐用法)
即,此头文件只展开一次 once
2. 编译:
编译优化的优点:速度较快
编译优化的缺点:不利于调试
推荐用法:
- 开发:debug
- 编译:release
增量编译(build):目标文件比源文件更新则进行编译(若仅修改头文件,推荐使用全部编译(rebuild))
四、C++基础
1. iostream说明
cerr:通常为错误信息,立即刷新到缓冲区
clog::通常为日志,不需要立即刷新到缓冲区
- std::flush :执行到此行语句,显式的刷新出来
- std::endl :刷新且换行
2. 命名空间
namespace NAME
{
void fun()
{
//...
}
}
void fun()
{
//全局
}
int mian()
{
using namespace NAME; //可写在mian外部,但不推荐,易产生冲突
func();
//表示既可以访问全局空间里的内容,也可以访问命名空间NAME里面的内容
}
3. 结构体
struct Point
{
int x;
int y;
void IncX()
{
x = x + 1;
} //加入函数,更倾向于类
};
int main()
{
Point p ;
p.x;
p.y; //访问
p.IncX();
}
五、对象与基本类型
//<other.cpp>
int g_x;
//<main.cpp>
int g_x; // 编译出错,提示重复定义
extern int g_x; //使用extern关键字,可以访问上述文件中的变量,对g_x的声明
六、数组、vector与字符串
1. 指针初始化
int (*a)[3] = {&x1,&x2,&x3}; //不可以这样进行初始化
int b[3];
int (*a)[3] = &b; //可以这样进行初始化
2. 声明数组引用
int (&a)[3];//引用
int b[3];
int [&a] = b;//此时a就是数组b的别名
//只能定义数组的引用,不能定义引用数组
int x1;
int x2;
int x3;
int &[3] = {x1,x2,x3}; //这种写法错误
3. 数组的引用
int a[3] = {1,2,3};
auto b = a;
std::cout << std::is_name_v<decltype(b),int*> << std::endl;
std::cout << *b <<std::endl; //b的地址
std::cout << b <<std::endl; //b的内容
std::cout << &(a[0]) <<std::endl; // a[0]的地址
//由此可见,b指向a中的第一个元素