.h文件为老式头文件,没有.h扩展名需要using namespace
声明变量:需要的内存以及该单元的名称
C++11 int n = {1}; 初始化列表 int n {1};
A 65 a 97
wchar_t 扩展字符集 ,是一种整数类型,wcout处理宽字符流
用const 比define好,可以使用C++ 作用域规则将定义限制在特定的函数或者文件中
float a = 2.34E+22f ; float b= a+1 ;b的值等于a ,因为float只能表示数字前6位或者前7位
C++11 列表初始化 ,不允许缩窄,不允许将浮点转换为整型. char c {11111};not allowed
计算表达式 整型提升
指针数组 const char * cities[Cities] = {}
DLL文件?
如果一个操作数无符号 另一个操作数有符号 有符号操作数转换为无符号操作数
强制类型转换 (long)a long(a) 后者是纯粹C++
int a[500] = {0} 所有元素都为0 int a[500]={1} 只有第一个元素是1
cin.getline(name,20) 不保存换行符 ;cin.get() 不读取换行符 留在输入队列中
C++11 原始字符串 R""
函数通过将返回值复制到指定的CPU寄存器或内存单元中将其返回,调用程序查看内存单元.
&array(数组名) 返回整个数组的地址 array是int数组 长度为8 则返回32字节的内存块地址
尽可能使用const , const int *ps ; int * const ps 不能修改指向;
int *ar2[4] 由4个指向int的指针组成的数组 ,int (*a)[4]是由一个指向由4个int组成的数组的指针
const double * (*pa[3])(const double *,int) = {f,f,f}; [] 优先级高于* , *p[3] 包含三个指针的数组,
&pa是整个数组的地址,pa和&pa值相同,但是类型不同,&pa+1内存块地址,要得到第一个元素的值,**&pa
char *a="wwww"有内置的结束符
函数指针 double (*pf)(int); 函数指针调用函数 (*pf)(5);
内联函数inline 程序不用跳到另一个位置执行代码,再跳回来
按值传递 按引用传递
右值引用 double && ref = std::sqrt(1);
函数重载 template<typename T>
模板中,显示具体化:对于给定的函数名,可以有非模板函数,模板函数,和显示具体化模板函数以及它们的重载版本
显式具体化:template <> void swap<job>(job & , job &); 指定使用这个模板 不会寻找其他的
显式实例化 template void swap<int>(int,int); 调用生成一个模板实例
重载解析过程:第一步,创建候选函数列表,其中包含与被调用函数的名称相同的函数和模板函数;第二步,使用候选函数列表创建可行函数列表;第三步,确定是否有最佳的可行函数,如果有就使用
char 到int 提升转换 , char 到float 标准转换
C++11 关键字 decltype(x+y) xpy = x+y 判断变量类型
单独编译:如果编写另一个程序,也需要使用这些函数,只需要包含头文件,并将函数文件添加到项目列表或make列表中
<>在存储标头文件的主机系统的文件系统中找,“”当前工作目录
单独编译:只需要将源码文件加入到项目中,不要加入头文件,也不要使用#include包含其他文件
C++11 四种方案存储数据:自动存储持续性 静态存储持续性 线程存储持续性 动态存储持续性
链接性 外部的名称可以在文件间共享,内部名称只能由一个文件中的函数共享
局部变量:先定义的高地址,后定义的低地址。
整数类型内部:低地址存储低位,高地址存储高位。
类,结构体,数组:先定义的低地址,后定义的高地址。
小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;
大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
static 内部链接性 准
通常编译器使用三块独立的内存,一块用于静态变量,自动变量,动态存储
名称空间:声明区域 潜在作用域
命名空间:使用在已命名的的名称空间中声明的变量,而不是外部全局变量
类对象的默认访问控制为private,域解析运算符::
C++ 对重载运算符的限制 : 重载后的运算符至少有一个操作数是用户自定义的类型;不能违反运算符原来的句法规则;不能创建新运算符;有一些运算符不能重载
A a = b ; 等同于 A a = A(b) 调用了复制构造函数 .
默认构造函数,默认析构函数,复制构造函数,赋值运算符,地址运算符.
公有派生:基类的私有部分也将成为派生类的一部分,基类的公有方法成为派生类的公有方法。 私有派生:基类的公有成员和保护成员都成为派生类的私有成员
虚基类:使得从多个类派生出的对象只继承一个基类对象,class Singer:virtual public Worker , 信息自动传递不起作用, 虚基类使用默认构造函数。 如不使用默认构造函数,就显示调用 SingingWaiter(const Worker &wk,int p = 0 ,int v = Singer:other ) : Worker(wk),Waiter(wk,p),Singer(wk,v);
单继承,没有重新定义方法就使用最近祖先的定义, 在多继承中,用作用域解析运算符
虚二义性规则与访问规则无关
默认类型模板参数 template < class T1 ,class T2 = int >, 可以为类模板类型参数提供默认值,但不能为函数模板参数提供默认值
模板具体化:1隐式实例化 显式实例化 显示具体化 ,编译器在需要对象之前,不会生成类的隐式实例化
2显式实例化 template class ArrayTP < string,100 >;
3显式具体化 template < > class Classname< specialized-type-name> {}; 以前版本这样写: class Classname< specialized-type-name>{};
模板用作参数 template< template < typename T> class Thing> ;
C++11 template< typename T > using arrtype = std::array< T,12 > ; arrtype< double > ball ;
注意友元函数定义声明顺序 需要前向声明
嵌套类类型受模板影响
栈解退 ,try块没有直接调用引发异常的函数,而是调用了对引发异常的函数进行调用的函数 ,程序释放栈中的内存,但不会在释放栈的第一个返回地址后停止
而是继续释放栈,直到找到一个位于try块。
noexcept 指出函数不会发生异常
RTTI 是运行时阶段类型识别 , dynamic_cast 运算符将指向基类的指针生成派生类的指针 ,typeid 返回一个指出对象类型的值,type_info 结构存储了有关特定类型的信息
dynamic_cast 向上转换 ,const_cast 改变值为const volatile ,用于执行只有一种用途的类型转换,去掉const,但仍然是不可以改变的
static_cast 向下向上都可以转换, reinterpret_cast 运算符用于天生危险的类型转换
智能指针 auto_ptr unique_ptr(比auto_ptr更安全) shared_ptr(多个指针指向一个对象)
标准模板库 STL 表示容器 迭代器 函数对象 算法
STL迭代器:输入迭代器、输出迭代器、正向迭代器、双向迭代器、随机访问迭代器
vector 数组的表示,提供了自动内存管理功能,可以动态改变vector对象的长度 在尾部添加和删除元素的时间是固定的,在头部或中间插入和删除线性时间
deque 两端插入和删除时间是固定的
list 任何位置插入和删除时间是固定的
forward_list 单链表
queue 适配器类,不允许随机访问队列元素,不允许遍历队列
priority_queue 也是适配器类,底层是vector
array C++11 没有定义调整容器大小的操作,没有push_back
函数对象 也叫函数符 ;返回bool值的一元函数是谓词
宽字符类型 wchar_t C++ 输出是字节流 ,ostream 将二进制位转换为由字符字节组成的输出流
cin 检查输入,跳过空白 直到遇到空白字符
cin.clear() 某个状态位被设置,另外两个状态位被清除 setState不会影响其他位
expections返回一个位字段,eofbit到达文件尾,badbit流被破坏,文件读取错误,failbit输入操作未能读取预期的字符或输出操作没有写入预期的字符
C++ 新标准
新类型 long long ,unsigned long long
统一的初始化(初始化列表) 1防止缩窄;2 std::initializer_list
声明 1 auto; 2 decltype y的类型和x相同 decltype(x) y;定义模板时很有用的
3返回类型后置 auto f2(double, int) -> double;
4模板别名 using= 可以用于模板具体化,但是typedef不能
array(double,12) a1;
template < typename T> using arr12 = array< T,12>;
arr12< double> a1 ; //就可以这样声明了 模板具体化
5nullptr 空指针不会指向有效数据的指针 是指针类型 不能转换为整型转换
智能指针 auto_ptr ,unique_ptr(比auto_ptr更安全) shared_ptr weak_ptr
异常规范方面的修改 noexcept
作用域内枚举 enum class New1{never,sometimes,often,always}; 防止发生名称冲突
对类的修改 explicit ; 类内成员初始化 ;
模板和STL方面的修改
(1基于范围的for循环
(2 新的STL容器 forward_list unordered_map unordered_multimap
(3 新的STL方法 cend()
(4 valarray升级 ,valarray 独立于STL开发的, valarray<bool> vbool = numbers > 9 ; vbool[i]被设置成numbers[i] > 9
slice 起始索引 索引数 跨距 ,如果valarray< int>对象varint,varint[slice(1,4,3)] = 10 ,第1 4 7 10 元素都设置成10
(5摒弃export
(6尖括号 vector< list< int> > vl;
右值引用关联到右值,可以出现在赋值表达式右边,但不能对其应用地址运算符的值,右值包括字面常量 x+y等表达式以及返回值的函数
int x = 10 ; int && r1 = 13 ; int &&r2 = x + y ; r2关联一个数值,将右值关联到右值引用导致该右值被存储到特定的位置 ,且可以获取该位置的地址
虽然不能将&用于13,但是可以用于r1.
移动语义和右值引用
移动语义实际上避免了移动原始数据,只是修改了记录
移动构造函数解析:让移动语义发生,需要两个步骤,右值引用让编译器知道何时可使用移动语义
Useless two = one ;
Useless four(one + three)
移动语义消除额外工作
C++11 新的类功能:原有默认构造函数 复制构造函数 复制赋值运算 析构函数
新增 移动构造函数 移动赋值运算
默认的方法和禁用的方法 default, 提供了移动构造函数就没有自动创建默认的构造函数
关键字delete和将复制函数放在private中效果差不多
delete 可以用于禁止特定的转换 void redo(int) = delete ;
委托构造函数 继承构造函数
管理虚方法: override final(禁止派生类重新定义函数)
Lambda函数
[&count](int x){count += (x % 13 == 0);}
三种方法给STL算法传递信息: 函数指针 函数符 lambda ,使用匿名函数---无需给函数命名
[](double x)->double{int y = x ; return x - y} 当lambda表达式一条返回语句时可以自动类型推断,但是多个语句不行
auto mod = [](int x) {return x % 3 == 0; };
int count13 ;
for_each(numbers.begin(),numbers.end(),[&count13](int x){count13 += x % 13 == 0})按引用捕获
用模板调用不同函数
template < typename T,typename F>
T use_f(T v,F f)
{
//******body
return f(v) ;
}
包装器function 重写上述程序 只使用use_f()的一个实例而不是5个 根据特征标
function< double(double)> ef1 = dub ;
function< double(double)> ef2 = [](double u){return u*u} ;
可变参数模板
{
模板参数包 类型列表 char int const char*
函数参数包
展开参数包
递归
}
template < typename...Args>
void show_list1(Args_args)
{
...
}
Args 是模板参数包 args是函数参数包
template< typename T,typename... Args>
void show_list(const T &value, const Args&... args)
{
show_list(args);
}
C++11 新增的其他功能
并行编程
新增库 random
chrono 时间间隔
typle 广义pair
radio 有理数
regex 正则表达式库
低级编程 抽象程度低
加强元编程
POD规则
C++ primer plus 学习笔记
最新推荐文章于 2022-12-10 21:24:01 发布