把打开的文件作为输出流的对象
1 | freopen("1.out","w",stdout); |
降低cin,cout时耗,如代码所见,第一句取消cin绑定cout,第二局取消cin/cout绑定stdio(绑定就是同步关系)
1 | cin.tie(0); |
测试时用来注释掉代码
1 | #if 0 |
输出所属类型的首字母
1 | typeid().name() |
兼容
直译有一个问题, 英语的”前后”在时间和空间上统一, 而汉语却是相反. 比如forward在空间上指前进, 在时间上指未来. 但是汉语中的”前”在空间上指前进, 在时间上却指过去.
向前兼容前进兼容
向后兼容后退兼容
这么想这两个词应该没问题了
vsode终端 输入chcp (change code page)后,显示936 对应 GB 2312,65001 对应 UTF-8,windows 中文系统默认是 936。
转义用的是右斜\
,因此建议复制粘贴win路径时要小心
shift+tab
反向缩进
无穷
随便用大点的树表示一下
正无穷 0x3f3f3f3f1061109567
负无穷 0xc0c0c0c0-1061109568
或 -0x3f3f3f3f
C++中NULL是未定义的,在#include <cstddef>
后被定义为__null,__null我没找到进一步定义,查看资料说是被编译器实现,成为空指针类型,这么复杂地搞。那为什么C++不继承这个__null实现,而是实现了一个特殊的字面值常量nullptr,与所有指针类型的 0 值等效呢。有趣。
std::string喜欢在堆上分配内存,显然这对性能提升是灾难的表现。所以可以使用string_view来解决这个问题
这个功能是提供类以外的函数访问类的私有成员。友元函数可以访问类的私有和保护成员,而不需要通过公共接口。
1 |
|
右值引用(rvalue reference) 是一种允许你绑定到 临时对象(右值) 的引用类型,它是现代 C++ 中实现 移动语义(move semantics) 和 完美转发(perfect forwarding) 的关键技术。
语法:T&&
类型 | 描述 |
---|---|
左值 | 变量、表达式 |
右值 | 临时值、字面量 |
1 |
|
int x=(1,024);
值为二十
and or not
都是C++中的保留字,如果C想用,包含头文件<ios646.h>
ofstream
对象,格式类似于cout
,实现文件输入与输出。有子函数open(),close()
函数原型中不必提供变量名,只需有数据类型就行
(…) 表示不指定参数
在编译阶段进行的原型化被称为静态类型检查
arguement 表示实参,parameter表示形参
指针和const
,这两个一结合就麻烦起来了
与C不同,C++不允许main()调用自己
递归,分治思想 divide-and-conquer strategy
获取函数地址的方法很简单,只需要使用函数名(后边不加括号)即可。double pm(int);
double (*pf)(int)
pf =pam;
则定义出一个指向pm()的函数指针,这个函数指针可以这么用pf(4)
,等价于(*pf)(4)
忍受逻辑上无法自圆其说的观点正是人类思维活动的特点。
如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做,但以前不是这样。
左值 可被引用的数据对象。long edge =5L;
5L代表long类型的5
如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。解决方法是,禁止创建临时变量,现在的C++标准正是这样做的(然而,在默认情况下,有些编译器仍将发出警告,而不是错误消息,因此如果看到了有关临时变量的警告,请不要忽略)。
&&
表示右值引用。右值,不能通过地址访问的值。NULL
在C中是(void*)0,C++中为整数0.c++中当一个指针的值为0时,认为指针为空指针void*
无类型指针
返回引用主要是为了更高的效率,减少拷贝。
要为某个参数设置默认值,则必须为他右边的所有参数提供默认值。
函数重载 关键是函数特征标(function signature),即函数参数列表。
函数模板template<typename AnyType>
定义了一种无类型变量AnyType
实例化和具体化
decltype(x) y
make y the same type as x
不要使用#include来包含源代码文件,这样做将导致多重声明。
#ifndef
if not define
register int x;
指出程序员想使用一个自动变量,在C++11中,这种提示作用也失去了,保留关键字register的重要原因是,避免使用了该关键字的现有代码非法。
$$ 链接性\left{
\begin{array}{lcl}
外部\
内部\
无\
\end{array} \right.$$
cv限制符 const和volatileconst
表明内存被初始化后程序便不能再对它进行修改volatile
表明,即使程序代码没有对内存单位进行修改,其值也可能发生变化
mutable 指出某个变量可以被修改
对函数使用static修饰表明该函数只在这个文件中可见
接口 一个共享框架,供两个系统交互时使用。
工作电脑上怎么也配置不好clangd,原来是缺少MSVC库,windows下的clangd需要MSVC的库。下载后就没头文件爆红的问题了。