摘要: //本树只有一个父节点,最深子节点为2级,拥有复选框 //遍历树控件(只有一个父节点,命名为“所有模板”) void CCheckOverLapDlg::TraverseTree(CTreeCtrl* pTreeCtrl) { CString strParent = _T("所有模板"); //主函 阅读全文
posted @ 2024-08-03 12:00 刘民心 阅读(79) 评论(0) 推荐(0)
摘要: C++的隐式转换,有好处也有坏处,因为是“自动的”,导致有时它的行为与我们预期不符。 explicit是用于指定显示类型转换的,C++11 #include <iostream> using namespace std; template <typename T> class Ptr { publi 阅读全文
posted @ 2024-08-03 11:59 刘民心 阅读(35) 评论(0) 推荐(0)
摘要: 初始化列表 在C++98时,若想使用花括号“{}”对数组元素进行初始化,只能进行形如: int arr[5] = {0}; int arr[] = {1, 2, 3, 4} ; 但一些自定义类型(包括标准库中形如vector这样的容器)是不被允许的,在C++11中增加了该功能,这种初始化的方法被称为 阅读全文
posted @ 2024-08-03 11:59 刘民心 阅读(59) 评论(0) 推荐(0)
摘要: POD通常用于说明一个类型的属性,尤其是用户自定义类型POD是一种普通属性,不像虚函数或虚继承那样特别,主要体现在与C兼容,可使用C的老方法,如memcpy等 POD被分为平凡的和标准布局的,两种基本概念 何为平凡的? 拥有平凡的默认构造函数和析构函数 如果定义了构造函数,这个类就失去了平凡的属性, 阅读全文
posted @ 2024-08-03 11:59 刘民心 阅读(111) 评论(0) 推荐(0)
摘要: 项目中遇到如题需求,因为有编译警告视为错误的要求,因此不可使用c风格强转,采用C++风格进行强制转换: 代码如下 const char * A= ??; //去掉const属性 char *pA = const_cast<char *>(A); //char *转uint8_t * uint8_t 阅读全文
posted @ 2024-08-03 11:58 刘民心 阅读(259) 评论(0) 推荐(0)
摘要: 联合体是一种在C/C++中的构造类型的数据结构,联合体内可定义多种不同数据类型,它们会共享内存空间。 在C++98中,非POD类型成员的联合体无法通过编译,例如: struct Student{ //定义了构造函数,student成为非pod类型 Student(bool g, int a): ge 阅读全文
posted @ 2024-08-03 11:56 刘民心 阅读(53) 评论(0) 推荐(0)
摘要: C++11开始,允许用户定义字面量,将四种基本类型转换成我们需要的类型 前置知识:字面量 用户定义自变量形式为: 返回类型 operator "" 用户自定义后缀(参数) 如: //定义 constexpr int operator "" _S(double num) { return (num + 阅读全文
posted @ 2024-08-03 11:54 刘民心 阅读(39) 评论(0) 推荐(0)
摘要: 内联的名字空间允许程序员在父名字空间定义或特化子名字空间的模板。 namespace的用法不再赘述,主要是用于分割全局命名空间,避免出现全局的变量或函数名或类名重名。 inline namespace 应用场景: 如果程序员需要长期维护、发布不同库的版本,可使用内联名字空间这个特性 举例: #inc 阅读全文
posted @ 2024-08-03 11:46 刘民心 阅读(132) 评论(0) 推荐(0)
摘要: C++中,我们原本使用typedef为类型定义别名。 C++11中,我们倡导使用using来替代typedef为类型定义别名 typedef与using相同之处:都可以取别名 #include <iostream> #include <type_traits> using namespace std 阅读全文
posted @ 2024-08-03 11:25 刘民心 阅读(30) 评论(0) 推荐(0)