文章目录
环境配置
VScode
在mac上使用vscode创建第一个C++项目
亲测能跑,需要注意的就是c_cpp_properties.json
里面的includePath
字段里的clang
版本要自己去系统里看一下。
还有就是文中说“[⇧⌘B]是编译程序,[⇧⌘R]是运行程序”,但实际上运行的是[⇧⌘P]的run task,如下
下面的run c++和build c++就是tasks.json里配置的两个功能
Visual Studio Code 如何编写运行 C、C++ 程序? - 谭九鼎的回答 - 知乎
案例code runner
代码组织
内存
C++内存分配方式详解(堆、栈、自由存储区、全局/静态存储区和常量存储区)
C语言~size_t详解
关键字
define
#define宏定义中的#,##,@#,\ 这些符号的神奇用法
也可以写#define SETTER(value_type, field) set_##field
,就是定义了一个set的宏
inline
static
C++中的static关键字的总结
const和static const的区别
const
C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!
const 修饰函数参数,返回值,函数体
extern
extern的使用
//文件1.cpp
#include <iostream>
int count ;
extern void write_extern();
int main()
{
count = 5;
write_extern();
}
//文件2.cpp
#include <iostream>
extern int count;
int num = 10;
void write_extern(void)
{
int num2 = 500;
std::cout << "Count is " << count << std::endl;
}
在执行的时候,只要让文件2里的count能在内存里找到count就行
auto
explicit
变量
声明
指针与引用
c/c++变量前加*和加&的区别
利用&
可以对变量取址,利用*
可以对指针取值。
Java里只有引用没有指针,如果把值本身传递给函数,会生成形参,并不会修改值,但把引用传递进函数,修改了之后就会修改内容。
C++里有引用有指针,而且任何东西都有引用和指针,引用代表的是别名,个人认为和Java里的引用是一个意思,只不过c++里所有东西都有引用,java里基本对象没有引用,指针代表的是地址。这俩其实没啥关系,当把一个值传递给函数的时候,同上,但如果传递了引用进去,同上,但传递了指针进去,也可以修改值。
分配内存,pvalue是指针,new就是为这个指针指向的位置分配内存
double* pvalue = NULL; // 初始化为 null 的指针
pvalue = new double; // 为变量请求内存
对象
定义
构造
C++创建对象的两种方法(C++用new和不用new创建类对象)
也可以使用ClassName c1=ClassName(param)
大括号初始化
方法
方法调用
引用、值、指针
【C++ - 18】C++函数参数传递三种方式
int* a(是指针) int& a(是引用)int a(是形参)
C++里,方法的参数不指定传值/传引用,一律传递值
正确理解C/C++中的传值调用/传址调用/引用调用
其实传指针也可以理解为传值调用,只不过复制的是一个新的指针
C++函数传值返回和引用返回
lambda表达式
std
thread
std::thread 用法與範例
std::mutex 用法與範例
std::atomic 用法與範例
IO
C++ 读取键盘输入(cin/cin.getline()/cin.get()/cin.clear())
函数式
C++11:std::bind
如果第二个参数是对象相当于调用这个对象的这个方法
C++11 中的std::function和std::bind
容器
C++11 中的 emplace
vector的reserve和resize
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
class Apple{
public:
Apple(){name="empty";}
Apple(string n):name{n}{}
string name;
};
int main(int argc, char* argv[])
{
vector<Apple> vect;
vect.push_back(Apple("a"));
vect.push_back(Apple("b"));
vect.push_back(Apple("v"));
vect.push_back(Apple("f"));
vect.resize(10); //新的空间不覆盖原有四个元素占有的空间,现在size和capacity都是100
cout<<vect.size()<<endl;
int i = 0;
for (i = 0; i < 10; i++)
{
cout<<vect[i].name<<endl;
}
return 0;
}
智能指针
C++ make_shared and .get()
c++ 智能指针用法详解
shared_ptr的使用和陷阱
CMAKE
GCC 和 cmake的关系?
Make 命令教程
【译】一个简单的 make & makefile 教程
Makefile隐晦规则
Makefile由浅入深–教程、干货
隐晦规则可以改写,例如$(CFLAGS)
是可以修改的,从而影响隐晦规则
makefile高级用法–隐晦规则2
双后缀是老用法
makefile自动变量与隐晦规则推导