类型转换
[TOC] dynamic_cast 动态转换(dynamic_cast)通常用于处理继承关系中的类型转换,用于运行时进行多态类型指针的转换。主要用于将父类指针或引用类型转换为子类指针或引用。在转换过程中会进行类型检查,若两类型非父子关系,则会返回NULL或报错。1 Base* basePtr = new Derived(); Derived* derivedPtr = dynamic...
[TOC] dynamic_cast 动态转换(dynamic_cast)通常用于处理继承关系中的类型转换,用于运行时进行多态类型指针的转换。主要用于将父类指针或引用类型转换为子类指针或引用。在转换过程中会进行类型检查,若两类型非父子关系,则会返回NULL或报错。1 Base* basePtr = new Derived(); Derived* derivedPtr = dynamic...
[TOC] 类型萃取1 类型萃取(Type Traits)是 C++11 引入的一组模板,用于在编译时获取类型的属性,就是把类型提取出来。 以一部分函数和关键词为例: (1) std::is_same_v<T1, T2> 判断 T1 和 T2 是否是同一种类型。 (2) std::is_integral<T>::value 判断 T 是否为整型。 C+...
[TOC] 右左法则 1)从最里层圆括号中未定义的标识符看起。1 2)首先往右看,再往左看。 3)遇到圆括号或方括号时可以确定部分类型,并调转方向。 4)重复2,3步骤直到阅读结束。 参考文章234 c 指针阅读技巧-右左法则 ↩︎ 来源:ChatGPT ↩︎ ...
[TOC] 1. 仿函数 在C++中,仿函数(也称为函数对象)通过重载operator()的实例,使一个类的实例表现得像一个函数。[^1] 2. 仿函数的优势 状态保持:与普通函数相比,仿函数可以保持状态。你可以在类中定义成员变量来存储信息,并在operator()调用中使用这些信息。 灵活性:由于它们是类的实例,仿函数可以拥有构造函数和析构函数,...
[TOC] 匿名函数(lamda函数) 一个lamda函数的格式为: [capture](parameters)->return_type{/*...*/}; [capture]: 捕获列表(Capture List),决定了函数在定义时能够访问和使用哪些外部变量。1 []:空捕获列表,表示 lambda 函数不捕获任何外部变量,只能使用函数内部的...
[TOC] 1. 函数指针 1.1 含义 函数指针(Function Pointer)用于实现动态函数调用、回调函数、函数指针数组。 一个函数指针的形式如下: int (*funcPtr)(int); // 指向一个接受一个int参数并返回int的函数 以下通过例子来展示怎样将函数指针与void*互相转换: 函数指针 => void* int (*...
[TOC] 类的默认函数 只声明一个空类,不做任何事情的话,编译器会自动生成一系列默认的合成函数,所有这些函数都是 inline 和 public 的。并且这些函数的定义并不是无条件生成的,惟有当这些函数被调用时才会被编译器创建出来。1 class Empty { };//定义了一个空类,无任何成员 //等同于以下定义 class Empty { public: Empty()...
[TOC] explicit explicit关键字主要用来防止构造函数的隐式类型转换。在C++11及以后的版本中,explicit关键字的用途得到了扩展,允许用于修饰接受一个以上参数的构造函数。这样做可以防止编译器自动执行不期望的类型转换,增加代码的安全性和可读性。 参考12 来源:ChatGPT ↩︎ ...
[TOC] 1. __declspec 1.1__declspec(dllexport) :导出 也就是导出格式:在dll头文件中相关内容前使用的关键字,表明该dll中相关的代码(类、函数、全局变量)会暴露给其他应用程序使用。 1.2 __declspec(dllimport) :导入 也就是引入项目:在其他工程中要使用该dll中相关内容时,在前面增加的关键字。 以下是一个定义在...
[TOC] using关键字在现代C++中非常有用,特别是在涉及模板编程和泛型编程时,它可以与别名模板结合来使代码更加清晰和容易维护。由于using让代码更加符合直觉,其在类型定义和命名空间管理方面比传统的typedef和单独的命名空间声明更受欢迎。1 1、声明命名空间 “using” 关键字最为人熟知的用途之一就是简化命名空间2的使用。 using声明可以将命名空间中的特定成员引入...