C++ 特性

C++ 特性

编译过程:
CPP 预处理 .I
.I 编译 .s (优化)
.s 汇编 .o
.o 链接 可执行文件

强制类型转化

隐式转化:相似类型间的转换
显示类型转化: 不相似类型转化 如指针与整形

  1. static_cast : 用于非多态类型转化:标准转化可以使用,但是不相关类型不可以转化(静态交换)
  2. reinterpret_cast : 将一种类型转化为另一种类型
  3. const_cast :删除变量的常量属性,方便赋值
  4. dynamic_cast:用于将一个父类对象的指针转换为子类对象的指针或引用(动态交换)
//1. static_cast
int i = 10;
double b = static_cast<double>(i);
//2. reinterpret_cast
int i = 10;
int * p = reinterpret_cast<int *>(i);
//3. const_cast
string s;
char str[20];
strcpy(str,s.c_str);
const char a = "a";
char * p = const_cast<char *>(&a)
// 4. dynamic_cast:
// 会检查能否转成功不成返回0 用于 父 ——> 子 必须公有继承和虚函数



特殊关键字

  1. inline 向编译器建议以内联函数处理
  2. const 不能修改的变量 在初始化列表中初始化
  3. mutable 被声明的变量可以被常函数修改
  4. static 声明静态成员,包括静态数据成员和静态成员函数,被类的所有对象共享,静态数据成员必须初始化才可以使用,静态成员函数只能访问静态成员,不能访问非静态成员因为该函数没有空指针
  5. virtual 声明虚函数,用于实现多态
  6. friend 友元
  7. volatile 使其可以在编译器认识的范围外被修改,因此编译器不对其进行优化
  8. explicit 修饰的构造函数不能在隐式转换中使用
  9. register 只可以在一块,不可以在全局,告诉编译器尽可能快的访问这个变量
    10.extem 告诉编译器存在一个函数或变量可以在提前声明存在

深拷贝浅拷贝

  1. 浅拷贝两个变量公用一个实例
  2. 复制两个对象

nullptr

为了代替NULL 专门用来区分空指针和0

auto

auto 让编译器通过初始值来推算变量的类型,当然,其定义的变量必须要有初始值
decltype(变量)可以获取变量的类型

常用语迭代器
auto itr = vec.cbegin()
ayto 不能用于函数参数传递 可以考虑使用模板解决

decltype 和sizeof很像

区间迭代

for(auto &i:arr)
{

}

初始化列表

按照数据定义顺序进行初始化
C++11 把其绑定在类型上 std::initializer_list

模板

template

类的默认函数

  1. 默认构造函数
  2. 默认拷贝构造函数
  3. 默认析构函数
  4. 默认重载运算符 =
  5. 默认重载运算符 &
  6. 默认重载取地址符const 函数
  7. 默认移动构造函数(C++11)
  8. 默认重载移动赋值操作符函数(C++11)

C++ 类与结构体

  1. C++ 类默认成员是私有的 结构体默认成员是公有的
  2. C++ 结构体继承默认是公有的 类继承默认是私有的

智能指针

auto_ptr (弃用)
unique_ptr
shared_ptr
weak_ptr
原理:将普通指针封装为栈对象,栈对象在生存周期之后,会在析构函数中释放掉内存,从而防止内存泄露
share_ptr 采用引用计数的方式管理对象,当引用计数为零的时候才释放空间,普通指针不可以直接赋值给智能指针,一个是类一个指针,可以使用 make_shared

  1. auto_ptr
auto_ptr<string> p1 (new string("test"));
auto_ptr<string> p2;
p2 = p1;
// p1 失效
  1. unique_ptr 独占指针
    所有权不可以转换,一个对象同一时间只能有一个指针指向
unique_ptr<string> p1 (new string("test"));
unique_ptr<string> p2;
p2 = p1; // 报错 需要用move 移动
  1. shere_ptr 共享指针 引用计数指针 针对指向同一个对象的指针数计数
  2. weak_ptr 用于指向shere_ptr 指向的对象 是对象的访问手段
    weak_ptr 可以解决 share_ptr 死锁问题 weak 可以通过.lock()转化为shere_ptr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老黑675

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值