随笔分类 - C++
摘要:decltype 运算符 decltype(变量) decltype(表达式) 当 decltype 用于变量以及类的成员变量时,能够获得变狼的类型,同时还能得到这个类的引用类型以及 CV 限定符(const 限定符,volatile 限定符) 由于 b的类型是 a 的引用,所以 c 的类型也是 a
阅读全文
摘要:常量表达式和 constexpr 在编译过程中,就可以把这个固定值进行替换,而不需要在程序运行时再去计算结果,这样可以提高程序的性能 const 和 constexpr 关系 常量表达式函数(constexpr用于函数的声明) 常量表达式函数的一些要求: 函数的返回值和传参是字面类型(Literal
阅读全文
摘要:Dimension MeasureStringToDimensionWithUnit(const std::string& value, bool& useDefaultUnit, DimensionUnit defaultUnit = DimensionUnit::PX, float defaul
阅读全文
摘要:右值引用(Rvalue reference)和移动语义(Move semantics) 左值(lvalue)和右值(rvalue) 左值(也称为 locator value) 是一个可以被修改的存储位置,指向内存中的某个位置 例子:变量、数组元素、解引用指针等 判断左值的方法是: 能够获得这个表达式
阅读全文
摘要:智能指针(Smart Pointer) 普通指针:指向内存区域的地址变量 使用普通指针容易出现的一些程序的错误 1. 内存泄漏(Memory Leak) 如果一个指针所指向的内存是动态分配的,那么即使这个指针变量离开了所在的作用域,这块内存也不会被 自动销毁 动态分配的内存不进行释放,则会导致内存的
阅读全文
摘要:容器 map first:代表键 second:代表值 遍历 也可以使用迭代器来访问 插入 删除(erase) > 返回删除元素的数量 查找功能 find upper_bound(返回的迭代器是指向键值大于所给定值的第一个元素) 找到所有价格小于等于 6.8 的商品 lower_bound(返回的迭
阅读全文
摘要:函数模板 首先是函数模板 然后是函数模板的重载,函数模板的重载仍然是函数模板 函数模板有 3种实例化形式 隐式实例化:在调用时,传入模板类型实参,或者通过函数实参类型推断出模板参数类型 显式实力化:使用关键字 template,并将关键字声明中的类型参数替换成实际类型 显示特化:使用关键字 temp
阅读全文
摘要:宏定义 '#' 和 '##' '#'号(将符号转为字符串) 这条定义中,定义了一个 PRINT 的宏函数 预处理器遇到这样的宏,会将 #a 替换成以字符串表示的参数 a 例如: '##'号(连接符:将2个表达式连接到一起) 预处理器会将这2条宏扩展成下面的代码 我们可以看到:这2条宏定义其实就是定义
阅读全文
摘要:函数封装与绑定 std::function 与 std::bind 在 stl 标准库中,提供了一些函数包装的模板,它们可以对函数或者可调用的对象进行包装,方便在其他函数中调用 封装 std::function 一个通用的多态函数封装器,它将一个可调用的对象,例如: 函数指针 函数对象 Lammbd
阅读全文
摘要:函数指针 int numbers[] = {1, 2, 3, 4, 5}; cout << hex << (unsigned long long)numbers << endl; // 64fcc0 对于一个函数来说,它是由一段代码组成的,这段代码也是存储在内存区域中,因此,也是可以获得函数的地址
阅读全文
摘要:Lambda表达式(回调,闭包) 用于快读定义一个匿名函数对象,也被称作 closure 闭包,常见定义方式如下: [] 捕获表达式,用于捕获外层作用域中的变量,并在函数代码中使用 () 函数参数列表 可选限定符:不常用 返回类型(如果代码省略了这一部分,那么编译器会根据代码中的返回语句,自动推断出
阅读全文
摘要:结构、联合、枚举 1. 结构 (Strut) struct Date{ unsigned short year,month,day; }; // 注意 struct 后面要有 ; struct student{ char name [100]; char id[10]; short gender;
阅读全文
摘要:C++ Lambda 表达式 快速入门 // lambda 函数 // 本质上:就是匿名函数 auto lam = [] {cout << "hello world";}; lam(); // 使用 lambda 函数 auto add = [](int a, int b)->int { retur
阅读全文
摘要:日志打印 OffsetT OffsetT<float> dragOffset = OffsetT<float>(offsetX, offsetY); LOGE("aclq dragOffset: %{public}f, %{public}f", dragOffset.GetX(), dragOffs
阅读全文
摘要:IPC(InterProcess Communication):进程间通信
阅读全文
摘要:临时对象 1. 临时对象的概念 一些临时对象,是因为我们代码书写问题而产生的。统一称临时变量为临时对象 new delete 栈 2. 产生临时对象的情况和解决 3 种情况和解决方案 class CTempValue{ public: int val1; int val2; public: CTem
阅读全文
摘要:左值、右值、左值引用,右值引用,std::move函数 1. 左值和右值 int i = 10; // 对象:一块内存区域 i = 20; // 左值:能用在赋值语句等号左侧的东西,它能够代表 一个地址 // 右值:不能作为左值的就是右值 // 结论:C++ 的一条表达式,要么就是左值,要么就是右值
阅读全文
摘要:临时对象深入探讨,解析,提高性能手段 1. 临时对象概念 2. 产生临时对象的情况和解决 以传值的方式给函数传递参数 类型转换生成的临时对象 / 隐式类型转换以保证函数调用成功 函数返回对象的时候
阅读全文
摘要:RTTI、dynamic_cast、typeid、虚函数表 RTTI(Run Time Type Identification):运行时类型识别 > 基类中必须至少要有一个虚函数 Human * phuman = new Men; Human& q = *phuman; 通过运行时类型识别,程序能够
阅读全文

浙公网安备 33010602011771号