网站网站制作400多少钱,手机最新发布,自己做网站最新视频教程,网站开发实训报告模板1、reinterpret_cast
reinterpret_cast是四种强制转换中功能最为强大的#xff08;最暴力#xff0c;最底层#xff0c;最不安全#xff09;。它的本质是编译器的指令。 它的作用#xff1a;它可以把一个指针转换成一个整数#xff0c;也可以把一个整数转换成一个指针。…1、reinterpret_cast
reinterpret_cast是四种强制转换中功能最为强大的最暴力最底层最不安全。它的本质是编译器的指令。 它的作用它可以把一个指针转换成一个整数也可以把一个整数转换成一个指针。或者不同类型的指针的相互替换。
2、const_cast
运算符用于执行只有一种用途的类型转化即改变const或volatile。返回值为新类型。这里我们需要强调的是 const_cast主要用于更改指针或引用的const或volatile限定符。其中type_name必须是指针、引用或者成员指针类型。
const_cast type_name (expression)
3、static_cast
static_cast 只能用于良性转换这样的转换风险较低一般不会发生什么意外。编译期间转换转换失败的话会抛出一个编译错误。
4、dynamic_cast 用于在类的继承层次之间进行类型转换它既允许向上转型Upcasting也允许向下转型Downcasting。向上转型是无条件的不会进行任何检测所以都能成功向下转型的前提必须是安全的要借助 RTTI 进行检测所有只有一部分能成功。
5、虚函数表
64位系统虚函数表占用8字节处于对象最开始的地方。
windows上虚函数的偏移和Linux的偏移不一样Linux比windows大1。
6、内存对齐
结构体继承对齐 VS和GCC的差异
VS: 子类不会因为基类的类对齐属性而被推到下一个对齐位置之后;而是紧跟末尾字段对齐位置其后因此对于下面这个类子类字段位于偏移量4的位置。
GCC: 基类sizeof将对齐到对齐位置然后子类将从对齐位置之后继续因此对于下面这个类子类字段位于偏移量64的位置。
struct alignas(64) B64
{alignas(4) char a;
};
struct D : B64
{char b;
};D obj;
intptr_t offset obj.b - obj.a;
// offset (VS 4, GCC 64)
7、c11for循环 for(declaration:expression) { } 工作流程 1、将 expression 中的元素拷贝到 declaration 2、重复执行 这种方式不需要给出容器的两端循环会自动以容器为范围展开并且循环中也屏蔽掉了迭代器的遍历细节直接抽取容器中的元素进行运算。
expression 可以是容器、数组、表达式、初始化列表等.
基于范围的for循环使用
7.1、值拷贝
// 只是将容器中的元素拷贝到 val修改val不会影响容器中的值
for (auto val : arr)cout val endl;
7.2、引用
// 使用引用,修改val会影响容器中的值即可以直接修改容器的值且避免了拷贝的开销
for (auto val : arr)val;
7.3、只读引用
// 使用const 修饰引用使得只能只读不能修改容器的数据
for (const auto val : arr)cout val endl;
7.4、 关联容器 遍历关联容器(set、map、multiset、multimap)时即使使用引用也不能修改容器中的值。对于关联容器来说内部元素都是只读的这是由容器的特性决定的因此在 for 循环中 auto 会被视为 const auto